Bash陷阱退出功能

ber*_*cik 12 bash function exit

当函数退出时,bash中是否有可能调用某些命令.我的意思是:

function foo
{
    # something like this maybe?
    trap "echo \"exit function foo\"" EXIT

    # do something
}

foo
Run Code Online (Sandbox Code Playgroud)

我希望打印退出函数foo.

Aar*_*ron 21

是的,你可以陷阱RETURN:

$ function foo() {
>   trap "echo finished" RETURN
>   echo "doing some things"
> }
$ foo
Run Code Online (Sandbox Code Playgroud)

会显示

doing some things
finished
Run Code Online (Sandbox Code Playgroud)

从内置man bash的描述trap:

如果sigspec是RETURN,则每次执行shell函数或脚本时都会执行命令arg.或源内置完成执行.

  • 没有; 如果你想根据即将发布的函数返回代码采取不同的动作,你需要使用像`if`或`case`这样的条件.另请注意,`trap`是全局设置处理程序的,所以在调用`foo`之前存在的`RETURN`上的任何陷阱都会被替换掉`foo`(假设`foo`的主体是`{. ..}`command;`foo()(trap ...;)`不会影响调用上下文). (2认同)