2017-06-08 25 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 ) –