Nodejs shell脚本在linux中运行良好,但在Windows中运行不正常。为什么不会执行多个命令

时间:2017-05-24 23:25:39

标签: node.js linux windows shell

我发现我的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上的输出方式?

2 个答案:

答案 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时,

&&才会执行此命令。

这意味着它将每一行视为单独的命令。 在你的方式中,它(可能)将每一行视为相同的命令,并且无论出于何种原因,这导致它仅输出第一行。