进程replace – Node.js child_process

我试图从标准输出读取修改的内容之前运行subprocess修改文件(分两步)。 我试图通过使用在bash中完美工作的进程replace,而不是当我从节点尝试它。

这是那种命令的样子

var p = exec('command2 <(capture /dev/stdout | command1 -i file -) -', function (error, stdout, stderr) { console.log(stderr); }); 

stderr打印:

 /bin/sh: -c: line 0: syntax error near unexpected token `(' 

在节点中做这件事的正确方法是什么?

我通过将这些命令放在shell脚本中并从节点subprocess调用脚本来解决这个问题。 我还需要添加以下内容以posix模式设置bash以允许进程replace:

 set +o posix 

可能有更好的方法直接从节点中做这个,但它做的工作。 干杯!

你可以通过用-c标志调用sh命令在Node中spawn一个带有bashreplace的child_process

sh命令使用默认的bash解释器, -c标志要求解释器从string中读取命令,即: $(echo $PATH) 。 附加标志然后传递给它们的正常位置引用,例如: $0$1等。

所以一个例子可能是:

 const spawn = require('child_process').spawn; const prg = 'sh', args = [ '-c', 'echo $($0 $1)', 'ls', // $0 '-la' // $1 ], opts = { stdio: 'inherit' }; // Print a directory listing, Eg: 'ls -la' const child = spawn(prg, args, opts); 

你可以用bash -c 'command'来bash评估一个命令。 我已经testing了这一点,它与stream程replace和child_process一起工作。