我想同步执行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)。
有什么想法吗?我错了。,
答案 0 :(得分:0)
从文档中: https://github.com/shelljs/shelljs
"如果提供回调,则[async]将设置为true"。
不要通过回调。称之为:
var child = shell.exec(command);
child.stdout.on('data', data => {
/* ... do something with data ... */
});