2016-04-19 3 views
0

Я пытаюсь выполнить скрипт bash через Node.js, используя child_process.exec(). Однако он дует на второй строке файла: вернулсяЗапуск скрипта bash через Node.js - Неверный вариант -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

оболочки по умолчанию для '/ bin/ш 'согласно https://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback - может быть, это и есть причина? –

ответ

0

По умолчанию при вызове child_process.exec() он использует /bin/sh, который на Ubuntu является символьной ссылкой, указывающей на /bin/dash. Даш урезанная версия Баш, и я думаю, не поддерживает:

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

Добавление опции shell в Node.js child_proc.exec() исправляет это:

shell: '/bin/bash' 
+2

Интересно, но почему '#!/Usr/bin/env bash' игнорируется? – SaintHax

Смежные вопросы