如何使用nodejs childprocess exec来运行unix diff命令?

时间:2016-01-29 19:13:09

标签: node.js unix

我需要使用node来生成某些文件的差异。我已经尝试了diff npm package,虽然效果很好,但它的性能远不如你在/ usr / bin /中找到的差异版本。当我尝试使用exec来运行diff命令时,它总是出错。

var childProcess = require('child_process');

var cmd = "diff /path/to/file1.txt /path/to/file2.txt";
childProcess.exec(cmd, (error, stdout, stderr) => {
  if(error) {
    console.log(error);
  } else {
    console.log(stdout);
  }
});

输出:

{ [Error: Command failed: /bin/sh -c diff /path/to/file1.txt /path/to/file2.txt
]
  killed: false,
  code: 1,
  signal: null,
  cmd: '/bin/sh -c diff /path/to/file1.txt /path/to/file2.txt' }

如果我自己在命令行上运行该命令,它可以正常工作。

我已尝试运行/usr/bin/diff而非diff

我尝试了各种不同形式的引用。

我尝试过的所有其他命令,使用完全相同的文件,都有效。 catwc

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

Welp,我正在回答我自己的问题。

diff命令会在找到差异时返回失败退出代码。因此,console.log(stdout)电话从未到达。 如果我忽略错误,一切正常。

var childProcess = require('child_process');
var cmd = "diff /path/to/file1.txt /path/to/file2.txt";
childProcess.exec(cmd, (error, stdout, stderr) => {
  console.log(stdout);
});

就像一个魅力。