我有一个包含内容的 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 文件在 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..|
注意 0a
前面的额外 0d
(十六进制 0D = 十进制 13 = ASCII 回车,ANSI \r
) s(十六进制 0A = 十进制 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: No such file or directory
和 git: 'pull\r'不是 git 命令。请参阅“git --help”
,但在 \r
将光标移动到行首后,每条消息的尾端会覆盖其开头。
有一个名为 dos2unix
的程序可以将文本文件从 DOS 转换为 Unix:
dos2unix filename >newfilename
但这种转换实际上只包含删除回车符,您也可以使用 tr
明确地执行此操作:
tr -d '\r' <filename >newfilename
关于linux - bash 命令截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27162343/