Bas*_*ser 2 linux bash shell-script
我有一个脚本,如下所示......
顶部的一些函数定义,其中之一是......
function err_out
{
trap 'echo "ERROR in $STEP function. EXITING!";exit 1' ERR
#some more messages
exit 1
}
# Main program starts here
trap 'err_out' ERR
#do something
#call some functions
#call cleanup function
#end of script
Run Code Online (Sandbox Code Playgroud)
当函数中发生一些错误时,它们不会传播,并且 err_out 函数不会被调用。
我也尝试过#!/bin/bash -E;这样,当出现错误时,脚本会退出,但我需要的是将错误正确传播到处理程序。
从bash
信息页面:
shell 执行环境的所有其他方面在函数及其调用者之间都是相同的,但有以下例外: 和
DEBUG
陷阱RETURN
不会被继承,除非已使用内置函数为该函数指定了trace
属性,declare
或者-o functrace
已使用内置函数启用了该选项set
(其中如果所有函数都继承了DEBUG
和RETURN
traps),除非启用了 shell 选项,ERR
否则不会继承 trap 。-o errtrace
因此,您需要set -o errtrace
在脚本的顶部将ERR
陷阱传播到您的函数中。
此外,您需要小心ERR
中的递归陷阱err_out
。您确实想在错误处理程序中设置新陷阱,还是想显示该消息?如果是后者,就echo
这样;trap
仅当错误处理程序中发生错误时才会调用。
归档时间: |
|
查看次数: |
2389 次 |
最近记录: |