Bash 尝试通过脚本克隆mercurial存储库时获得404

Bash 尝试通过脚本克隆mercurial存储库时获得404,bash,mercurial,Bash,Mercurial,这是我经历过的一个更奇怪的问题,我不知道我是在经历bash还是hg问题 我有一个要克隆的hg存储库列表(参见BitBucket的EOL),它们都在一个文件中 这些都不起作用: for url in `cat urls.txt`; do hg clone $url; done cat urls.txt | xargs -n 1 hg clone cat urls.txt | xargs -n 1 echo hg clone > clone.sh sh clone.sh . clone.s

这是我经历过的一个更奇怪的问题,我不知道我是在经历bash还是hg问题

我有一个要克隆的hg存储库列表(参见BitBucket的EOL),它们都在一个文件中

这些都不起作用:

for url in `cat urls.txt`; do hg clone $url; done

cat urls.txt | xargs -n 1 hg clone

cat urls.txt | xargs -n 1 echo hg clone > clone.sh
sh clone.sh
. clone.sh
`cat clone.sh`
所有这些只会为每个克隆命令生成
中止:HTTP错误404:notfound

这项工作:

cat clone.sh

[select output]
[copy]
[paste]
[enter]
clone.sh
文件正好包含预期的内容;表单
hg克隆中有很多行https://bitbucket/...


我完全搞不懂,当一个带有命令的文件的内容直接粘贴到shell中时,它是如何产生一个结果的,而当它作为脚本运行时(即使使用
,它在当前shell中执行,而不是启动一个新的shell),结果却完全不同。这是怎么回事?

简单的解决方案:URL.txt文件包含CRLF行分隔符,它是在Windows计算机上生成的。出于某种原因,无论是shell还是hg,还是bitbucket.org服务器,都没有从URL的末尾删除这个无关的回车符,这导致了404错误


复制并粘贴这些规范化的行分隔符。将脚本内容复制并粘贴到第二个脚本文件中时,也获得了相同的结果,然后成功运行。

问题中包括
url.txt
(可能是前20行)
hg clone$url
可能会失败,因为
bash
会吃掉或误解
$url
中的字符。在这些情况下,请始终执行
“$url”
dos2unix url.txt
如果在Windows上重新生成文件,则可以派上用场,并且始终执行
“$url”
,即使这次没有它也可以。如果url:s中有
&
等内容,那么它就不会起作用。