Linux bash命令截断
我有一个包含内容的bash文件Linux bash命令截断,linux,bash,centos,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会得到命令的截断版本吗?在bash脚本中有回车符(Windows文本文件行结尾)。移除它们 bash文件在he
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会得到命令的截断版本吗?在bash脚本中有回车符(Windows文本文件行结尾)。移除它们
bash文件在hextump-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
(十六进制0d=decimal 13=ASCII回车,ANSI\r
)在0a
前面的额外0d(十六进制0a=decimal 10=ASCII换行符,ANSI\n
,bash将其视为行尾)
在bash中,回车不是空格,因此它被视为命令行上最后一个参数的一部分。出现错误是因为文件夹/var/www/path/to/folder.git\r
不存在,并且pull\r
不是有效的git
子命令
打印时,回车符会将光标移动到行首,这就是错误消息看起来错误的原因。Bash和git正在打印类似于foo.Bash:line 1:cd:/www/path/to/folder\r:没有这样的文件或目录
,git:'pull\r'不是git命令。请参见“git--help”
,但在\r
将光标移动到行的开头后,每条消息的结尾将覆盖其开头
有一个名为dos2unix
的程序,可以将文本文件从DOS转换为Unix:
dos2unix filename >newfilename
但是这种转换实际上只包括删除回车符,您也可以使用tr
显式执行:
tr -d '\r' <filename >newfilename
tr-d'\r'新文件名
使用类似于hextump-C
的内容读取bash文件,并检查文件中是否存在诸如0d
之类的意外字符。运行sh-x script\u name.sh
时会发生什么情况?