2017-08-24 76 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