2014-06-19 167 views
3

我想節點的js代碼中執行以下命令執行shell腳本的NodeJS代碼中

diff <(git log 01) <(git log 02) 

在命令行可以正常工作和gettig所需的輸出,我想

這裏是我的結點代碼

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 } 

回答

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

要執行的是命令使用bash specific syntax過程替代。我假設你正在爲你的exec函數使用節點的child_process模塊。如果是這種情況,那麼你寫的東西不起作用,因爲child_process模塊​​正在提供對popen(3)的訪問。

進入popen手冊頁,你會發現該命令被傳遞到/bin/sh,它不支持你正在使用的語法。