bash命令截断

时间:2014-11-27 02:57:09

标签: linux bash centos

我有一个包含内容的bash文件

cd /var/www/path/to/folder
git pull

当我运行它时,我得到了

: No such file or directorywww/path/to/folder
' is not a git command. See 'git --help'.

Did you mean this?
        pull

知道为什么bash会获得截断版本的命令吗?

1 个答案:

答案 0 :(得分:3)

您的bash脚本中有回车符(Windows文本文件行结尾)。删除它们。

bash文件在hexdump -C

下应如下所示
00000000  63 64 20 2f 76 61 72 2f  77 77 77 2f 70 61 74 68  |cd /var/www/path|
00000010  2f 74 6f 2f 66 6f 6c 64  65 72 0a 67 69 74 20 70  |/to/folder.git p|
00000020  75 6c 6c 0a                                       |ull.|
00000024

但你的看起来像这样:

00000000  63 64 20 2f 76 61 72 2f  77 77 77 2f 70 61 74 68  |cd /var/www/path|
00000010  2f 74 6f 2f 66 6f 6c 64  65 72 0d 0a 67 69 74 20  |/to/folder..git |
00000020  70 75 6c 6c 0d 0a                                 |pull..|

请注意0d前面的额外\r&#39}(十六进制0D =十进制13 = ASCII回车,POSIX 0a)(十六进制0A =十进制10) = ASCII换行符,POSIX \n,这就是bash将其视为行尾的原因)。

回车不是bash中的空格,因此它被视为文件名和git命令的一部分。打印时,它会将光标移动到行的开头,这就是输出看起来像这样的原因。它打印的内容类似于"foo.bash: line 1: cd: /www/path/to/folder\r: No such file or directory",但\r使光标移动到行的开头,并用": No such file or directory"部分覆盖消息的第一部分。

有一个名为dos2unix的程序,您可以在该文件上使用该程序来删除回车:

dos2unix filename >newfilename

或者您可以使用tr命令:

tr -d $'\r' <filename >newfilename
相关问题