2017-05-24 69 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