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

Bor*_*den 3 unix node.js

我需要使用节点来生成一些文件的差异。我尝试过diff npm 包,虽然效果很好,但它的性能比您在 /usr/bin/ 中找到的 diff 版本低得多。

当我尝试使用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);
  }
});
Run Code Online (Sandbox Code Playgroud)

输出:

{ [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' }
Run Code Online (Sandbox Code Playgroud)

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

我尝试过跑步/usr/bin/diff而不是仅仅跑步diff

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

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

有什么想法吗?

Bor*_*den 5

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

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);
});
Run Code Online (Sandbox Code Playgroud)

奇迹般有效。