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

时间:2011-11-13 01:33:21

标签: node.js shell ubuntu shebang

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

#!/usr/bin/env node --harmony_proxies
...

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

/usr/bin/env: node --harmony_proxies: No such file or directory

节点肯定是安装在PATH上的,因为如果我删除--harmony_proxies标志它就能正常工作。在Ubuntu中使用env时是否有一些不同的传递参数的方法?

3 个答案:

答案 0 :(得分:5)

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

以下是您的替代解决方案:

#!/bin/sh
exec node --harmony_proxies "$@"

希望它有所帮助。祝你好运!

答案 1 :(得分:0)

如果node命令安装在固定位置,您可以直接使用它:

#!/usr/bin/node --harmony_proxies

但是,如果您不能假设node已安装在特定位置,请使用其中一个答案。

答案 2 :(得分:0)

如果您不想修改来源,a wrapper alias可能是正确的解决方案。

我的.bashrc示例:

alias how2='/usr/bin/env node --no-deprecation "$(which how2)"'