通过Node.js运行bash脚本 - 非法选项-o pipefail

时间:2016-04-19 22:52:43

标签: node.js bash shell unix sh

我正在尝试使用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运行它可以正常运行。这是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);

1 个答案:

答案 0 :(得分: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'