【问题标题】:Why does passing arguments to the command in an env invocation not work?为什么在 env 调用中将参数传递给命令不起作用?
【发布时间】:2011-12-27 21:04:45
【问题描述】:

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

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

这在 OS X 下可以正常工作,但在 Ubuntu 中会出现以下错误:

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

Node 肯定已安装并位于 PATH 上,因为如果我删除 --harmony_proxies 标志,它就可以正常工作。在 Ubuntu 中使用 env 时是否有一些不同的传递参数的方式?

【问题讨论】:

  • 只是为了确定,/usr/bin/env node --harmony_proxies script-name 在命令行上是否正常工作?

标签: node.js shell ubuntu shebang


【解决方案1】:

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

来自我的 .bashrc 的示例:

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

【讨论】:

    【解决方案2】:

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

    #!/usr/bin/node --harmony_proxies
    

    但是,如果您不能假设 node 安装在特定位置,请选择其他答案之一。

    【讨论】:

      【解决方案3】:

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

      这里是您的替代解决方案:

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

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

      【讨论】:

        猜你喜欢
        • 2015-09-09
        • 2022-10-12
        • 1970-01-01
        • 2012-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-29
        相关资源
        最近更新 更多