在 Node.js 中执行 bash 命令并获取退出代码

新手上路,请多包涵

我可以像这样在 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。我错过了什么?

原文由 Marc Bacvanski 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 492
2 个回答

这两个命令在不同的 shell 中运行。

要获取代码,您应该能够在回调中检查 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
});

原文由 Joe 发布,翻译遵循 CC BY-SA 3.0 许可协议

从文档:

如果提供了 callback 函数,则使用参数 (error, stdout, stderr) 调用它。成功时, error 将是 null 。出错时, error 将是错误的一个实例。 error.code 属性将是子进程的退出代码,而 error.signal 将设置为终止进程的信号。任何非 0 的退出代码都被认为是错误。

所以:

 exec('...', function(error, stdout, stderr) {
  if (error) {
    console.log(error.code);
  }
});

应该管用。

原文由 Andreas Louv 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题