I am trying to exec a bash script via Node.js using child_process.exec(). However it is blowing up on the second line of the file:
#!/usr/bin/env bash
set -eo pipefail; [[ $TRACE ]] && set -x
echo "we are here"
The error returned is:
/bin/sh: 2: set: Illegal option -o pipefail
Why is this happening? When I run the script manually, not from Node it works fine. Here is the Node.js code:
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);
By default when you invoke child_process.exec() it uses /bin/sh which on Ubuntu is actually a symbolic link pointing to /bin/dash. Dash is a stripped down version of bash and I guess does not support:
set -eo pipefail; [[ $TRACE ]] && set -x
Adding the shell option to the Node.js child_proc.exec() fixes this:
shell: '/bin/bash'
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With