Скрипт Nodejs прекрасно работает в Linux, но не в Windows. Почему он не выполняет более одной команды

Я обнаружил разницу в том, как работает мой сценарий оболочки node.js в Windows и Linux. У меня есть строка команд, которые синхронно выполняются с использованием библиотеки child_process.

var cmd = `echo 'hello'
echo 'Stack'
echo 'Overflow'`

var exec = require('child_process').execSync;
var options = {
  encoding: 'utf8'
};
console.log(exec(cmd, options));

В линуксе

Это выполняет все 3 echo заявления и выводы, как я ожидаю.

hello
Stack
Overflow

В винде

В то время как в Windows я не знаю, выполняется ли это 3 раза или нет. Все, что я знаю, это то, что только первый echo Команда выводится.

hello

Почему я вижу это различие и могу ли я исправить это так, чтобы вывод сценария Windows был аналогичен выводу в Linux?

2 ответа

Решение

Вы должны использовать:

var cmd = "echo 'hello' && echo 'Stack' && echo 'Overflow'"

вместо

var cmd = `echo 'hello'
echo 'Stack'
echo 'Overflow'`

Я не совсем уверен, почему это работает, но у меня есть предположение.

&& выполняет эту команду, только если предыдущий уровень ошибки равен 0.

Это означает, что он обрабатывает каждую строку как отдельные команды. В то время как, по-вашему, он (вероятно) рассматривает каждую строку как одну и ту же команду, и по любой причине это приводит к выводу только первой строки.

Может ли быть так, что скрипт был создан в linux и, следовательно, имеет LF (LineFold) \n окончания строки? Windows, с другой стороны, ожидает CRLF (CarrageReturn LineFold) \r\n.

Когда вы меняете конец строки в выбранном вами редакторе на конец строки в стиле Windows, я уверен, что это сработает.

Другие вопросы по тегам