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