在nodejs代码中执行shell脚本

时间:2014-06-19 03:51:08

标签: node.js

我想在节点js代码

中执行以下命令
diff <(git log 01) <(git log 02)

在命令行中它正常工作并且我想要

所需的输出

这是我的节点代码

var command = "diff <(git log 01) <(git log 02)"
console.log(command)
  exec(command, function (error, stdout, stderr) {
    if (error !== null) {
      console.log(error)

    } else {

        console.log(stdout)
      }
    }
  });

但是在执行上面的代码时我会得到'

diff <(git 01) <(git log 02)
{ [Error: Command failed: /bin/sh: 1: Syntax error: "(" unexpected
] killed: false, code: 2, signal: null }

2 个答案:

答案 0 :(得分:5)

尝试像这样运行:

var spawn = require('child_process').spawn;
var command = "diff <(git log 01) <(git log 02)";
console.log(command)

var diff = spawn('bash', ['-c', command]);
diff.stdout.on('data', function (data) {
  console.log('stdout: ' + data);
});

diff.stderr.on('data', function (data) {
  console.error('stderr: ' + data);
});

答案 1 :(得分:1)

您要执行的命令使用bash specific syntax进行进程替换。我假设你正在使用节点的child_process模块来执行你的exec功能。如果是这种情况,那么您所写的内容并不起作用,因为child_process模块​​正在提供对popen(3)的访问权。

弹出popen的手册页,您会发现命令传递给/bin/sh,而{{1}}不支持您正在使用的语法。