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

