如何检测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
相关产品推荐
相关产品推荐

