Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
退出函数时的Bash陷阱_Bash_Function_Exit - Fatal编程技术网

退出函数时的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

在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 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中,我需要捕获并重置它们在函数终止之前。不管怎样谢谢你谢谢你问这个问题!不客气:)