Linux 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

我有一个包含内容的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文件在
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
时会发生什么情况?