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, я уверен, что это сработает.