2012-07-17 295 views
1

我正在为bash脚本编写单元测试,并希望检查脚本是否因错误而退出(我使用了带错误代码的exit)。拦截出口

有没有办法赶上exit(我知道trap),但不要中断命令流(类似异常捕捉)?

我的测试脚本:

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 
} 

等。

我想要一个接一个地执行所有测试。现在在第一个命令之后流动中断。

+0

为什么你不能只检查返回值?你是否用'set -e'运行测试脚本,并且没有正确处理被测脚本的返回值?也许你可以用一个例子来扩展你的问题,你有什么(代码)和你喜欢什么功能。 – 2012-07-17 11:51:51

+0

请参阅编辑 – qutron 2012-07-17 12:00:50

+0

您所展示的内容应该适用。偶然有'set -e'有效吗?如果将'set + e'放在测试脚本的开头附近会发生什么? – 2012-07-17 12:18:57

回答

1

你可以写:

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 

参考退出,回报手册页,知道什么时候该用哪个。