Linux 拦截出口

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(){ ...

我正在为bash脚本编写单元测试,并希望检查脚本是否在出错时退出(我将
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)和回送正常| |回送失败