我发现我的node.js shell脚本在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));
在Linux中
这将按照我的预期执行所有3个echo
语句和输出。
hello
Stack
Overflow
在Windows中
在Windows中,我不知道它是否执行了3次。我所知道的是只输出第一个echo
命令。
hello
为什么我看到这种差异并且可以修复它以便Windows脚本输出类似于它在Linux上的输出方式?
答案 0 :(得分:1)
可能是脚本是在linux中创建的,因此它有LF(LineFold)\ n行结尾?另一方面,windows需要CRLF(CarrageReturn LineFold)\ r \ n。
当您将所选编辑器中的行结尾更改为Windows样式的行结尾时,我敢打赌它会起作用。
答案 1 :(得分:1)
您应该使用:
var cmd = "echo 'hello' && echo 'Stack' && echo 'Overflow'"
而不是
var cmd = `echo 'hello'
echo 'Stack'
echo 'Overflow'`
我不太清楚为什么会这样,但我有猜测。
仅当前一个命令的errorlevel为0时,
&&
才会执行此命令。
这意味着它将每一行视为单独的命令。 在你的方式中,它(可能)将每一行视为相同的命令,并且无论出于何种原因,这导致它仅输出第一行。