You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测bash函数writeToErr的非零退出码并修改handleExit的exitCode为1

解决你的两个问题:修改exitCode与检测writeToErr状态

嘿,我来帮你一步步搞定这两个需求!

一、把handleExit里的exitCode从"0"改成"1"

这个很直接,找到你handleExit函数里定义或赋值exitCode为"0"的地方,直接把值换成"1"就行。比如:

function handleExit() {
  // 原来的代码
  // const exitCode = "0";
  // 改成下面这样
  const exitCode = "1";
  
  // 你已经调用的exit 1可以保留,或者用exitCode转成数字执行
  process.exit(parseInt(exitCode, 10));
}

如果是在条件判断里设置的exitCode,比如if (success) exitCode = "0",那把这里的"0"替换成"1"就好。

二、检测writeToErr是否返回非零退出状态

这得看writeToErr的实现方式,分几种情况来说:

情况1:writeToErr是同步函数,直接返回退出码

如果这个函数执行完会返回一个数字类型的退出码,那直接捕获返回值判断就行:

function handleExit() {
  const exitCode = "1";
  
  // 调用writeToErr并获取返回的退出码
  const writeErrStatus = writeToErr();
  
  // 检测是否非零
  if (writeErrStatus !== 0) {
    console.error("writeToErr执行失败,退出码:", writeErrStatus);
    // 这里可以根据需求做额外处理,比如提前退出或者记录日志
  }
  
  process.exit(parseInt(exitCode, 10));
}

情况2:writeToErr是异步Promise函数

如果它是返回Promise的异步函数,就得用.then()或者async/await来处理:

// 用async/await的方式(需要把handleExit改成async函数)
async function handleExit() {
  const exitCode = "1";
  
  try {
    const writeErrStatus = await writeToErr();
    if (writeErrStatus !== 0) {
      console.error("writeToErr执行失败,退出码:", writeErrStatus);
    }
  } catch (err) {
    // 如果函数执行抛出异常,也可以在这里捕获处理
    console.error("writeToErr执行出错:", err);
  }
  
  process.exit(parseInt(exitCode, 10));
}

// 或者用.then()链式调用
function handleExit() {
  const exitCode = "1";
  
  writeToErr()
    .then(writeErrStatus => {
      if (writeErrStatus !== 0) {
        console.error("writeToErr执行失败,退出码:", writeErrStatus);
      }
      process.exit(parseInt(exitCode, 10));
    })
    .catch(err => {
      console.error("writeToErr执行出错:", err);
      process.exit(parseInt(exitCode, 10));
    });
}

情况3:writeToErr内部调用了系统命令(比如用child_process)

如果它是通过child_process模块调用外部命令,那同步调用(比如execSync)会在命令失败时抛出错误,异步调用(exec/spawn)会通过回调或事件返回状态:

// 同步调用的情况(execSync)
function handleExit() {
  const exitCode = "1";
  
  try {
    writeToErr(); // 内部用execSync,失败会抛出Error
  } catch (err) {
    // 错误对象里的status属性就是命令的退出码
    console.error("writeToErr执行失败,退出码:", err.status);
  }
  
  process.exit(parseInt(exitCode, 10));
}

// 异步调用的情况(exec)
function handleExit() {
  const exitCode = "1";
  
  writeToErr((err, stdout, stderr) => {
    if (err) {
      console.error("writeToErr执行失败,退出码:", err.code);
    }
    process.exit(parseInt(exitCode, 10));
  });
}

根据你的writeToErr实际实现方式选对应的检测方法就行啦!

内容的提问来源于stack exchange,提问作者thebiggestlebowski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:18:02