我想在节点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 }
答案 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}}不支持您正在使用的语法。