Multi-command shell 分离 child 处理 WITH spawn() IN Node.js

Multi-command shell AS detached child process WITH spawn() IN Node.js

供参考:https://nodejs.org/api/child_process.html#child_process_options_detached

大家好,

所以我需要 spawn child child-process, spawn 因为 exec 不允许 options.detached & child.unref();,意味着它可以与 parent 解耦,允许 child 到 运行 并自行完成,vice-versa 也是 parent(在我们的特定情况下,parent 进程可以在 long-running child 之前终止,在这种情况下,更新完成而无需像 exec 那样等待 child。

我们有一个由节点 (parent) 应用程序构建的长连接 ("… ; … ; …") 命令,但是像 spawn("echo stuff >>stderr.log") 一样不起作用,只有 spawn('ls', [-l]) ,我显然不能链接命令(因为它在他的文档中也被引用并且在 SO 上多次引用。

TLDR;

我们需要使用 spawn,但 spawn 无法处理链式 shell 命令。 我现在真的需要在 bash 中编写我的命令然后执行吗,这真的是唯一的选择吗??

谢谢

注意 spawnshell 选项:

If true, runs command inside of a shell. Uses '/bin/sh' on UNIX, and 'cmd.exe' on Windows. A different shell can be specified as a string. The shell should understand the -c switch on UNIX, or /d /s /c on Windows. Defaults to false (no shell).

所以:

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

编辑:如果您使用的 Node 版本不支持此选项,这里有一个替代方案:

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