NodeJS:如何同步执行shell命令并检测错误

时间:2017-07-20 13:29:08

标签: node.js shell

我想同步执行shell命令并检查shell命令的结果是否有任何错误。

因此我使用shellJS及其exec方法。

不幸的是,成功的处理者永远不会到达。我的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.logs之后,console.log(“AAA”)出现在应用程序的末尾.... 在shell.exec命令触发任何输出之前,console.log(“BBB”)会立即出现。

shell.js的自述文件解释了:

  

同步执行给定命令,除非另有说明。   在同步模式下,这将返回一个ShellString(兼容   ShellJS v0.6.x,它返回{code:...形式的对象,   stdout:...,stderr:...})。否则,这将返回子进程   对象,并且回调获取参数(代码,stdout,stderr)。

有什么想法吗?我错了。,

1 个答案:

答案 0 :(得分:0)

从文档中: https://github.com/shelljs/shelljs enter image description here

"如果提供回调,则[async]将设置为true"。

不要通过回调。称之为:

var child = shell.exec(command);
child.stdout.on('data', data => {
  /* ... do something with data ... */
});