退出函数时的Bash陷阱
在bash中是否有可能在函数退出时调用某些命令。我的意思是:退出函数时的Bash陷阱,bash,function,exit,Bash,Function,Exit,在bash中是否有可能在函数退出时调用某些命令。我的意思是: function foo { # something like this maybe? trap "echo \"exit function foo\"" EXIT # do something } foo 我想打印出退出函数foo。是的,您可以设置陷阱返回: $ function foo() { > trap "echo finished" RETURN > echo "doing
function foo
{
# something like this maybe?
trap "echo \"exit function foo\"" EXIT
# do something
}
foo
我想打印出退出函数foo。是的,您可以设置陷阱
返回:
$ function foo() {
> trap "echo finished" RETURN
> echo "doing some things"
> }
$ foo
将显示
doing some things
finished
从manbash
对trap
内置的描述:
如果返回sigspec,则每次使用执行shell函数或脚本时都会执行命令arg。或源内置完成执行
你能不能也返回这个函数的代码;如果要根据函数即将返回的代码采取不同的操作,则需要使用条件,如if
或case
。还要注意的是,trap
全局设置处理程序,因此在调用foo
之前存在的RETURN
上的任何trap在调用foo
后都会被替换(假定foo
的主体是{…}
命令;foo()(trap…)
不会影响调用上下文),除了return
上的陷阱外,您还可以在任何非零返回状态下触发陷阱ERR
。您不能为返回码1和返回码2设置不同的陷阱。@bercik不,您不能。即使使用隐式返回,trap命令中的$?
也不会包含在函数范围内执行的最后一个命令的成功值。如果您想要跟踪函数执行的开始/结束和结果,那么陷阱还有其他替代方法,尽管不是函数而是脚本退出时使用EXIT
调用处理程序。我需要在不同的上下文中使用它,因为我的陷阱从bash_profile函数泄漏到我的普通shell中,我需要捕获并重置它们在函数终止之前。不管怎样谢谢你谢谢你问这个问题!不客气:)