Node 的 Shebang 行在 Ubuntu 18 中不起作用

Node 的 Shebang 行在 Ubuntu 18 中不起作用

我刚刚在 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。

相关内容