【发布时间】:2016-06-19 14:05:33
【问题描述】:
我有一个从工作脚本中复制的简单 shell 脚本。如果我将它复制粘贴到终端,它就可以工作:
if true
then
true
fi
但是,当我使用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'.. 什么?
为什么在这个特定的脚本中会发生这种情况,而不是在我的命令行或我复制的脚本中?
【问题讨论】:
-
考虑将shellcheck.net 添加到您的自动化测试工作流程中。
-
代码附近有Windows机器吗?非工作版本中是否有回车?其中一个错误使用
$'\r',这表明这是问题所在。请参阅How to convert DOS/Windows newline (CRLF) to Unix newline (\n) in bash script? 以及许多其他相关问题。 -
@JonathanLeffler 是的,我捏造了这个问题并给出了社区答案,因为我永远无法找到一个一般性的问题来标记为重复。例如,您建议的内容是关于如何转换文件,而对于张贴者来说,为什么这完全相关并不明显。我已将这个添加到 bash 标签 wiki,但如果您找到更好的,我很乐意切换它。
-
@ThomasDickey 如果您更新 bash 标签 wiki 并提出任何您认为针对 CR 导致的重复数据删除语法错误的更好、通用、规范的常见问题解答,我将非常高兴删除此问题! (找到好的东西是很棘手的,你的 #2 就是这篇文章就证明了这一点。)
标签: bash shell sh carriage-return