我刚刚在 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
答案1
给出此错误消息的脚本不知何故被破坏了。例如,如果您在将脚本发送到 AWS 实例之前在 Windows 编辑器中对其进行了一些修改,那么您的脚本现在可能会以非打印开头物料清单在 shebang 之前,也许您所有脚本的行现在都以 Microsoft 最喜欢的 CR-LF 组合结尾,而不是传统的 Unix LF。
在您的 AWS 实例上检查此命令的输出:
$ LC_ALL=C sed -n 1l myscript.sh
这告诉sed
打印脚本的第一行,但转义所有非打印字符并以一个$
字符结束该行(以防行尾有不可见的空格)。
只有一个正确的输出:
#!/usr/bin/env node$
如果你看到的看起来不像确切地就像这样,在原始文件上运行相同的命令myscript.sh
。如果得到相同的结果,请在那里修复它,然后再次将其复制到 AWS。