2017-06-08 22 views
1

參考:https://nodejs.org/api/child_process.html#child_process_options_detached多命令shell作爲沾邊兒的處理與重生()的Node.js的

嗨,

所以我需要spawn子子進程,spawn因爲exec沒有按」允許一個options.detached & child.unref();,這意味着它可以與父母分離,允許孩子自己運行和完成,反之亦然父母(在我們的特定情況下,父進程可以在長期運行的孩子之前死亡,在那種情況下更新,完成而不需要像exec那樣等待孩子)。

我們有一個由節點(父)的應用程序建立一個長連接("… ; … ; …")命令,但像spawn("echo stuff >>stderr.log")不起作用,只有spawn('ls', [-l]),我顯然不能鏈命令(因爲它是在還提到,他和實況在SO多次

TLDR;

我們需要使用spawn,但spawn不能處理鏈接的shell命令 我真的現在需要在bash寫我的命令並執行。那麼,這是否是唯一的選項??

THX

+0

我不知道但是如果第一個進程的輸出是一個'ReadableStream',那麼你可能可以使用'pipeTo'連接到下一個進程的輸入流,這應該達到與我只想回答的'|' – niceman

回答

2

通知的shell選項spawn

如果true,運行一個外殼內命令。在UNIX上使用'/bin/sh',在Windows上使用'cmd.exe'。一個不同的shell可以被指定爲一個字符串。 shell應該理解UNIX上的-c開關,或Windows上的/d /s /c。默認爲false(無殼)。

所以:

let child = child_process.spawn('foo; bar; blah', { shell : true }); 

編輯:如果您使用的是不支持這個選項節點版本,這裏是一個另類:

let child = child_process.spawn('/bin/sh', [ '-c', 'foo; bar; blah' ]); 
+0

相同的效果,到<= 5.x(這將不可用),但顯然我們最近纔將我們的嵌入式板更新到6.x,YAY! –

+0

@ThaBrad爲了完整起見,我添加了一個不支持該選項的Node版本的替代方案。 – robertklep

+0

thx這麼多。 還不能編輯你的帖子,但一個小小的錯誤 - >'child_process.spawn('foo; bar; blah',[],{shell:true})'(如果使用選項,則需要參數,至少在TypeScript ) –