Linux 拦截出口
我正在为bash脚本编写单元测试,并希望检查脚本是否在出错时退出(我将Linux 拦截出口,linux,bash,shell,Linux,Bash,Shell,我正在为bash脚本编写单元测试,并希望检查脚本是否在出错时退出(我将exit与errorcode一起使用) 有没有办法捕获退出(我知道陷阱),但不要中断命令流(类似于异常捕获) 我的测试脚本: do_smth1 && echo OK || echo Fail do_smth2 && echo OK || echo Fail do_smth3 && echo OK || echo Fail 我的主要剧本: do_smth1(){ ...
exit
与errorcode一起使用)
有没有办法捕获退出
(我知道陷阱
),但不要中断命令流(类似于异常捕获)
我的测试脚本:
do_smth1 && echo OK || echo Fail
do_smth2 && echo OK || echo Fail
do_smth3 && echo OK || echo Fail
我的主要剧本:
do_smth1(){
...
...
[ $? -eq 0 ] && success || error_exit
}
等等
我想一个接一个地执行所有测试。现在,流在第一个命令后中断。您可以编写:
success=0
error_code=1
do_smth1(){
...
...
[ $? -eq 0 ] && return $success || return $error_code
}
do_smth1 && echo OK || echo Fail
do_smth2 && echo OK || echo Fail
do_smth3 && echo OK || echo Fail
请参阅“退出”和“返回”手册页,以了解何时使用它。您可以编写:
success=0
error_code=1
do_smth1(){
...
...
[ $? -eq 0 ] && return $success || return $error_code
}
do_smth1 && echo OK || echo Fail
do_smth2 && echo OK || echo Fail
do_smth3 && echo OK || echo Fail
请参阅“退出”和“返回”手册页,以了解何时使用它。为什么不能只检查返回值?您是否使用
set-e
运行测试脚本,并且没有正确处理测试脚本的返回值?也许你可以用一个例子来扩展你的问题,比如你有什么(代码)和你喜欢什么功能。你展示的应该有用。您是否碰巧拥有set-e
?如果将set+e
放在测试脚本开头附近,会发生什么情况?不幸的是,没有任何变化。您可能应该使用return
后跟错误代码,而不是exit
<代码>返回将给出错误代码,但不会停止进程。如果您想要返回最后一个命令的退出状态,只需完成该命令。可能是一个子shell<代码>(do_smth1)和&echo OK | | echo Fail为什么不能检查返回值?您是否使用set-e
运行测试脚本,并且没有正确处理测试脚本的返回值?也许你可以用一个例子来扩展你的问题,比如你有什么(代码)和你喜欢什么功能。你展示的应该有用。您是否碰巧拥有set-e
?如果将set+e
放在测试脚本开头附近,会发生什么情况?不幸的是,没有任何变化。您可能应该使用return
后跟错误代码,而不是exit
<代码>返回将给出错误代码,但不会停止进程。如果您想要返回最后一个命令的退出状态,只需完成该命令。可能是一个子shell<代码>(do_smth1)和回送正常| |回送失败