为什么在env调用中将命令传递给命令不起作用?

tim*_*ney 3 shell ubuntu shebang node.js

我有一个shell脚本来运行带有一些参数的节点,如下所示:

#!/usr/bin/env node --harmony_proxies
...
Run Code Online (Sandbox Code Playgroud)

这在OS X下工作正常,但在Ubuntu中它出错:

/usr/bin/env: node --harmony_proxies: No such file or directory
Run Code Online (Sandbox Code Playgroud)

Node肯定安装在PATH上,因为如果我删除--harmony_proxies它就可以了.env在Ubuntu中使用时是否有一些不同的传递参数的方法?

小智 5

在Linux上,解释器名称后面的整个字符串作为单个参数传递给解释器,此字符串可以包含空格.[1]因此,命令行参数不会被拆分,并且env命令正在尝试执行node --harmony_proxies文件,这显然无法找到.有关详细信息,请参见此处此处.

以下是替代解决方案:

#!/bin/sh
exec node --harmony_proxies "$@"
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.祝好运!