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

Я нашел разницу в том, как моя node.js shell script работает в Windows vs 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));

В Linux

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

hello
Stack
Overflow

В Windows

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

hello

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

Ответ 1

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

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

вместо

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

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

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

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

Ответ 2

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

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