2016-04-19 35 views
0

child_process.exec()を使用してNode.js経由でbashスクリプトを実行しようとしています。しかし、それはファイルの2行目に吹いている:Node.js経由のbashスクリプトの実行 - 不正なオプション-o pipefail

#!/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); 
+0

シェルのデフォルトを'https://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callbackによると、それが理由でしょうか? –

答えて

0

デフォルトでは、あなたがchild_process.exec()を起動するとき、それはUbuntuの上で実際に/bin/dashを指すシンボリックリンクである/bin/shを使用しています。ダッシュは、bashののストリップダウンバージョンであり、私はサポートしていないと思います。

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

をNode.jsのにchild_proc.exec()修正このshellオプションを追加: `/ binに/ SHに

shell: '/bin/bash' 
+2

興味深いですが、 '#!/ usr/bin/env bash'はなぜ無視されますか? – SaintHax

関連する問題