我刚刚在 AWS 上创建了一个 Ubuntu 18.04 实例并复制了一个现有项目。Node 的常用 shebang 行#!/usr/bin/env node
现在不起作用。它给出了:
#!/usr/bin/env: No such file or directory
有什么问题?
我的$PATH
变量是:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
which node
给出:/usr/bin/node
which nodejs
给/usr/bin/nodejs
ls -l nodejs
给出:/usr/bin/nodejs -> /etc/alternatives/nodejs
ls -l /usr/bin/env
给出:
-rwxr-xr-x 1 root root 35000 Jan 18 2018 /usr/bin/env
给出此错误消息的脚本以某种方式被破坏了。例如,如果您在将脚本发送到 AWS 实例之前在 Windows 编辑器中对脚本进行了一些润色,那么您的脚本现在很可能以shebang 之前的非打印BOM开头,并且您的脚本的所有行现在可能都以 Microsoft 最喜欢的 CR 结尾-LF 组合而不是传统的 Unix LF。
在您的 AWS 实例上检查此命令的输出:
这告诉
sed
打印脚本的第一行,但转义所有非打印字符并以字符结束该行$
(如果行尾有不可见的空格)。只有一个正确的输出:
如果您看到的内容看起来不完全一样,请在您原来的
myscript.sh
. 如果您得到相同的结果,请在此处修复它,然后再次将其复制到 AWS。