2017-08-24 141 views
3

函数退出时,bash是否可以调用某些命令?我的意思是这样的:从函数退出时的Bash陷阱

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

    # do something 
} 

foo 

而且我希望退出函数foo被打印出来。

回答

4

是的,你可以陷阱RETURN

$ function foo() { 
> trap "echo finished" RETURN 
> echo "doing some things" 
> } 
$ foo 

将显示

doing some things 
finished 

trap内置的man bash的描述:

如果SIGSPEC是回报,每次执行shell函数或脚本时,都会执行命令arg。或源内置完成执行。

+0

而且你可以陷阱也返回这个函数的代码? – bercik

+1

不;如果您想根据即将到来的函数返回码采取不同的操作,则需要使用“if”或“case”这样的条件。还要注意,'trap'在全局设置处理程序,所以一旦调用了'foo',就会替换'foo'之前存在的'RETURN'上的任何陷阱(假设'foo'的主体是'{。 ..}'command;'foo()(trap ...;)'不会影响调用上下文)。 – chepner

+1

也就是说,除了'RETURN'上的陷阱之外,你还可以在任何非零返回状态*上捕获'ERR'。你只是不能设置不同的陷阱为1返回代码与返回代码为2. – chepner