我正在尝试使用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);
答案 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'