糟糕的 shell 脚本解释器?有时可以工作

糟糕的 shell 脚本解释器?有时可以工作

我遇到了一种奇怪的情况,一些用作#!/bin/shshebang 的 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 

相关内容