tha*_*guy 5 bash shell sh carriage-return
我有一个从工作脚本复制的简单shell脚本.如果我将其复制粘贴到终端,它可以工作:
if true
then
true
fi
Run Code Online (Sandbox Code Playgroud)
但是,当我运行脚本时bash myscript,我会收到各种语法错误,就好像缺少某些关键字一样.
myscript: line 4: syntax error near unexpected token `fi' 好像then不在那里.myscript: line 6: syntax error: unexpected end of file好像fi不在那里.myscript: line 4: syntax error near unexpected token `$'\r' .. 什么?为什么会在这个特定的脚本中发生这种情况,而不是在我的命令行或我复制的脚本中?
tha*_*guy 14
TL; DR:您的脚本具有Windows样式的CRLF行结尾,也就是说\r\n.
\n通过删除回车符转换为Unix样式.
它们可以^M在以下输出中检测到cat -v yourscript:
$ cat -v myscript
if true^M
then^M
true^M
...
Run Code Online (Sandbox Code Playgroud)
将编辑器设置为使用Unix行结尾保存文件,即"行终止符"或"行尾字符",然后重新保存.
您也可以使用dos2unix yourscript或从命令行中删除它们cat yourscript | tr -d '\r' > fixedscript.
回车字符只是bash的另一个字符.then是不一样的then\r,所以bash不会将它识别为关键字并假设它是一个命令.然后它一直在寻找then并失败
如果之后恰好有一个尾随空格then,你会遇到类似的问题fi.
| 归档时间: |
|
| 查看次数: |
4160 次 |
| 最近记录: |