2017-07-20 14 views
0

シェルコマンドを同期して実行し、エラーがあった場合はシェルコマンドの結果を確認したい。NodeJS:シェルコマンドを同期的に実行してエラーを検出する方法

私はshellJSとそのexec-methodを使用します。

残念ながら、成功ハンドラは決して到達しません。私のshell.execステートメントの後のステートメントはすぐに実行されます。

これは私のコードです:

function * exec(cmd, verbose) { 
    if(verbose) console.log("\nCMD " + cmd); 

    var ret = 0; 

    shell.exec(cmd, function(code, stdout, stderr) { 
     console.log("AAAAA") 
     ret = code; 
     if(code !== 0) console.log(stderr) 
    }); 

    console.log("BBBBB") 

    if(ret !== 0 && ret !== undefined) { 
     console.log("ERROR: there is an error occured: ", ret); 
     process.exit(); 
    } 
    return ret; 
} 

私は、このメソッドを呼び出します。

yield exec('ls -l', true); 
yield exec('ls -l ..', true); 

はconsole.log( "AAA")他のすべてのコンソール後のアプリの最後に表示されます。 logs .... console.log( "BBB")は、shell.execコマンドによって出力がトリガーされる直前に表示されます。

shell.jsのREADMEは説明する:特に指定のない限り

は、同期的に与えられたコマンドを実行します。 同期モードでは、ShellString( ShellJS v0.6.xと互換性があり、{code:...、 stdout:...、stderr:...}の形式のオブジェクトを返します)を返します。それ以外の場合は、子プロセス オブジェクトを返し、コールバックは引数(code、stdout、stderr)を取得します。

何が間違って行う、

答えて

0

ドキュメントから:。 https://github.com/shelljs/shelljs enter image description here

"コールバックが提供されている場合、それは[非同期] trueに設定されます"。

コールバックを渡しません。それを次のように呼び出す:

var child = shell.exec(command); 
child.stdout.on('data', data => { 
    /* ... do something with data ... */ 
}); 
関連する問題