【问题标题】:Running bash script via Node.js - Illegal option -o pipefail通过 Node.js 运行 bash 脚本 - 非法选项 -o pipefail
【发布时间】:2016-04-19 22:52:43
【问题描述】:

我正在尝试使用 child_process.exec() 通过 Node.js 执行 bash 脚本。但是它在文件的第二行爆炸了:

#!/usr/bin/env bash
set -eo pipefail; [[ $TRACE ]] && set -x

echo "we are here"

返回的错误是:

/bin/sh: 2: set: Illegal option -o pipefail

为什么会这样?当我手动运行脚本时,而不是从节点运行它工作正常。这是 Node.js 代码:

var child = child_proc.exec(bashScript, {
    env: _.extend(process.env, {
        'LB_HOST': config.loadBalancers.lb1
    }),
    timeout: 0
});

child.stdout.pipe(process.stdout);
child.stderr.pipe(process.stderr);

【问题讨论】:

标签: node.js bash shell unix sh


【解决方案1】:

默认情况下,当您调用child_process.exec() 时,它使用/bin/sh,它在Ubuntu 上实际上是一个指向/bin/dash 的符号链接。 Dash 是 bash 的精简版,我猜不支持:

set -eo pipefail; [[ $TRACE ]] && set -x

shell 选项添加到 Node.js child_proc.exec() 可以解决此问题:

shell: '/bin/bash'

【讨论】:

  • 有趣,但为什么#!/usr/bin/env bash 被忽略了?
猜你喜欢
  • 2019-06-01
  • 1970-01-01
  • 2011-01-23
  • 1970-01-01
  • 1970-01-01
  • 2016-10-01
  • 2021-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多