2017-05-24 68 views
1

我发现node.js shell脚本在Windows和Linux中的工作方式有所不同。我有一系列使用child_process库同步执行的命令。Nodejs shell脚本在Linux中正常工作,但在Windows中无法正常工作。为什么它不会执行多个命令

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

只是出于好奇,当你将'cmd'改为'var cmd ='echo'hello'&& echo'Stack'&& echo'Overflow'“'会发生什么? – pudility

+0

不确定tbh。当我回到我的电脑(在我的手机上)时,我可以试试它 – Cameron

+1

那太棒了!我会尝试,但我目前没有可以轻松访问的Windows计算机。 – pudility

回答

1

,您应该使用:的

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

代替

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

我不明白为什么这个工作,但我有一个猜测。

&&执行仅当先前的命令的错误级别为0

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

1

难道是脚本是在linux中创建的,因此它有LF(LineFold)\ n行尾?另一方面,窗户期望CRLF(CarrageReturn LineFold)\ r \ n。

当您将选择的编辑器中的换行符更改为windows风格的行尾时,我敢打赌它会起作用。

+0

我觉得这是最合乎逻辑的解释,已经将代码切换到LF和CLRF,但都没有工作。 – Cameron