linux trap

語法,功能,參數說明,

語法

trap [-lp] [[arg] sigspec ...]

功能

內置命令,當shell接收到sigspec指定的信號時,arg參數(命令)將會被讀取,並被執行。
例如:
trap "exit 1" HUP INT PIPE QUIT TERM
表示當shell收到HUP INT PIPE QUIT TERM這幾個命令時,當前執行的程式會讀取參數“exit 1”,並將它作為命令執行。

參數說明

如果arg參數預設或者為“-”,每個接收到的sigspec信號都將會被重置為它們進入shell時的值
如果arg是空字元串每一個由sigspec指定的信號都會被shell和它所調用的命令忽略
如果有 -p 選項而沒有提供arg參數則會列印所有與sigspec指定信號相關聯的的trap命令
如果沒有提供任何參數或者僅有-p選項,trap命令將會列印與每一個信號有關聯的命令的列表
-l選項的作用是讓shell列印一個命令名稱和其相對應的編號的列表
每個sigspec信號都是是以名字或者編號的形式定義在signal.h頭檔案中,信號的名字是不區分大小寫的,其前綴SIG是可選的,如果某個信號是EXIT(0),那么arg指定的命令將會在shell上執行退出命令時執行(If a sigspec is EXIT (0) the command arg is executed on exit from the shell),如果sigspec是DEBUG,那么arg指定的命令將會在以下每個命令命令執行之前執行:
簡單命令,for語句,case語句,select命令,算法命令,在函式內的第一條命令
更多trap debug的使用可以參考extdebug選項說明。
如果sigspec是ERR,arg參數指定的命令將會在任何簡單命名執行完後返回值為非零值時執行,但是也有以下例外情況:
1)如果執行失敗的命令是緊跟在while或者until關鍵字之後的一組命令中的一部分時
2)如果執行失敗的命令是if測試語句的一部分時,是 && 和 ||連線的列表中的一部分時
3)如果執行失敗的命令的返回值是被取反過的(通過!操作符)
在以上情況中如果sigspec是ERR,arg命令不會執行,這些規則同樣適用於errexit選項。
如果sigspec是RETURN,arg指定的命令在每次shell函式或者腳本用"."或者內置的命令執行完成後執行,在shell入口處被忽略的命令是沒法被trap和reset的,被trap的信號,在創建的子進程中使用時會在子進程被創建時被重置為原始的值。如果trap使用的sigspec信號是invalid的信號則trap命令返回false(失敗),否則返回成功(true)

相關詞條

熱門詞條

聯絡我們