Node.jsで次のようにbashコマンドを実行できます。
var sys = require('sys')
var exec = require('child_process').exec;
function puts(error, stdout, stderr) { sys.puts(stdout) }
exec("ls -la", function(err, stdout, stderr) {
console.log(stdout);
});
そのコマンドの終了コード(この例ではls -la
)を取得するにはどうすればよいですか?走ってみた
exec("ls -la", function(err, stdout, stderr) {
exec("echo $?", function(err, stdout, stderr) {
console.log(stdout);
});
});
ただし、これは前のコマンドの終了コードに関係なく、常に0を返します。私は何が欠けていますか?
これらの2つのコマンドは、別々のシェルで実行されています。
コードを取得するには、コールバックでerr.code
をチェックできる必要があります。
うまくいかない場合は、exit
イベントハンドラーを追加する必要があります
例えば.
dir = exec("ls -la", function(err, stdout, stderr) {
if (err) {
// should have err.code here?
}
console.log(stdout);
});
dir.on('exit', function (code) {
// exit code is code
});
ドキュメントから:
callback
関数が提供されている場合、引数(error, stdout, stderr)
で呼び出されます。成功すると、error
はnull
になります。エラーの場合、error
はErrorのインスタンスになります。error.code
プロパティは子プロセスの終了コードになり、error.signal
はプロセスを終了したシグナルに設定されます。 0以外の終了コードはエラーと見なされます。
そう:
exec('...', function(error, stdout, stderr) {
if (error) {
console.log(error.code);
}
});
動作するはずです。
ノードのドキュメントで、コールバック関数に関する次の情報を見つけました。
成功した場合、エラーはnullになります。エラーの場合、エラーはエラーのインスタンスになります。 error.codeプロパティは子プロセスの終了コードになります error.signalはプロセスを終了したシグナルに設定されます。 0以外の終了コードはエラーと見なされます。