我有一个包含内容的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会获得截断版本的命令吗?
答案 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