进程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一起工作。
- meteorCMS两个应用程序或全在一个
- 节点 – 查看在require()期间使用哪个版本的软件包?
- 问题与Node.js和child_process.exec参数
- 如何使用Node.js createReadStream和createWriteStream编写多个文件
- Ember.js,Express.js和Node.js的资产pipe道?
- 如何将MEAN堆栈部署到我的托pipe服务器?
- 指定由节点中的hubot创build的GET请求的callback函数
- 当在node.js中的subprocess中使用vim时,stdio /pipe道问题
- 套接字之间的双工pipe道似乎在SMTP后面的NAT后面继续TLS,但有时只是