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

如何让sh脚本返回执行命令的错误码?——获取pppd退出码的问题咨询

如何获取pppd的退出码并让脚本返回该值?

你的问题核心出在exec命令的使用上——exec会用pppd进程直接替换当前的shell脚本进程,所以脚本里exec之后的所有代码(包括那个判断退出码的if块)根本没有机会执行,自然没法返回pppd的退出码。

解决这个问题很简单,只需要去掉exec,让pppd作为脚本的子进程运行,这样shell就能正常捕获它的退出码了:

最简写法(推荐)

其实shell脚本默认会返回最后一个执行命令的退出码,所以你甚至不需要额外的判断逻辑,直接这样写就行:

#!/bin/sh
pppd call ${@:-provider}

当pppd结束后,脚本会自动返回它的退出码(0表示成功,1-20表示对应的错误)。

显式捕获退出码的写法

如果你想后续添加其他处理逻辑(比如日志输出),可以先把退出码存到变量里,再显式返回:

#!/bin/sh
# 运行pppd,作为脚本的子进程
pppd call ${@:-provider}
# 捕获pppd的退出码到变量
exit_code=$?
# 这里可以添加自定义逻辑,比如打印错误日志
# if [ $exit_code -ne 0 ]; then echo "pppd failed with code $exit_code"; fi
# 显式返回退出码
exit $exit_code

另外还要提一下你原来代码里的小语法错误:[ $? !-eq 0 ]里的!-eq是错误写法,正确的写法应该是[ $? -ne 0 ](-ne表示“不等于”)或者[ ! $? -eq 0 ](注意!和-eq之间要有空格),不过因为exec的问题,这个判断根本没机会执行,所以先解决exec的问题是关键。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 11:59:06