我遇到了一种奇怪的情况,一些用作#!/bin/sh
shebang 的 shell 脚本有时会起作用 - 其他时候它们会产生以下消息:
bash:./newshit.sh:/bin/sh^M:错误的解释器:没有此文件或目录
我是否遗漏了一些简单的东西?
答案1
那个 ^M 很明显——看起来脚本有 Mac 行尾 (Ctrl-M) 而不是 Unix 行尾 (Ctrl-J)。
它不会显示为文字 ^M - 事实上,取决于您的文本编辑器,它可能根本不会显示。
您没有说您使用的是哪种操作系统,因此我不确定您的系统上有哪些工具,但您可以尝试使用以下命令获取字符(非十六进制)转储:
od -tc newshit.sh
...并告诉我们 /bin/sh 后面是否跟着 \r, \n 或 \r\n ?
我期望你会看到类似这样的内容:
0000000 # ! / b i n / s h \r
或者如果你运行:
cat -e newshit.sh
...如果有回车符则会显示它。
答案2
dos2unix newshit.sh
将会修复它。
编辑:或者,如果由于某种原因您无法找到 dos2unix,这个简单的脚本可以做到这一点:
tr -d '\r' < newshit.sh > newshit-fixed.sh