我希望能够通过node运行shell命令并捕获stdout的结果。我的脚本在OSX上运行良好,但在Ubuntu上却不行。
我已经将问题和脚本简化为以下的node脚本:
我已经将问题和脚本简化为以下的node脚本:
var execSync = require('child_process').execSync,
result = execSync('echo "hello world" >> /dev/stdout');
// Do something with result
结果是:
/bin/sh: 1: 无法创建/dev/stdout: 没有这样的设备或地址
- 我已经尝试将
/dev/stdout
替换为/dev/fd/1
- 我已经尝试将shell更改为bash...
execSync('echo ...', {shell : '/bin/bash'})
就像我说的那样,上面的问题是简化的。真正的脚本接受一个文件名作为参数,结果应该写入该文件,因此我需要通过提供对stdout流的文件描述符来解决这个问题,即/dev/stdout
。
如何通过node执行命令,同时使命令可以访问其自己的stdout流?
result = execSync('echo "hello world" ');
不会在结果中返回“hello world”呢? - strobelightstdio
元素设置为"inherit"
相同。这意味着新启动的程序的输出将直接发送到用户的终端。 - Drahcir/dev/stdout
时(如在>>
的情况下),即使操作系统没有提供非shell应用程序可以识别的实际/dev/stdout
文件系统实体,它也可以被读取为FD 1。因此,从跨平台行为完全相同的角度来看,>>
不是一个可接受的替代品 - 最好使用一个写入命名文件的标准工具,例如tee
。 - Charles Duffy