trap命令Linux


 

trap命令用於捕獲指定的信號並執行預定義的命令,為shell內置命令

 

 有兩個常用選項

 

 

 

基本語法:

trap 'command' signal

signal是要捕獲的信號,command是捕獲到信號后,將要執行的命令,命令可以是若干條shell語句,也可以是一個函數

shell腳本在執行時,會產生三個"偽信號"(由shell產生,與os無關),trap也可捕獲這三個"偽信號"

 

shell "偽信號"

  • 信號名     產生時間
  • EXIT        從一個函數中退出或整個腳本執行完畢
  • ERR        當一條命令返回非0狀態
  • DEBUG   腳本中每條命令執行之前

 

  1. EXIT
    通過捕獲EXIT信號,可以在shell腳本中止執行或從函數中退出時,輸出某些想要跟蹤變量的值
    trap 'COMMAND' EXIT
     1 #!/bin/env sh  2 
     3 function exittrap(){  4         echo "[LINE:$1] Error: Command or Function exited with status $?"
     5 }  6 #trap 'errtrap $LINENO' EXIT
     7 trap "errtrap $LINENO" EXIT
     8 
     9 function vbn(){ 10         echo 'vbn'
    11 } 12 
    13 vbn

     

     
    需要對trap后的command加''進行保護,否則LINENO在第六行就會被替換,輸出的行號LINENO==1,是因為進到函數vbn執行的時候打開了子shell,LINENO是按照子shell來計數,執行完echo命令后,立即調用了全局errtrap函數(此時,仍在子shell中)
    下面為使用""的情況

     

     

  2. ERR
    通過捕獲ERR信號,我們可以追蹤執行不成功的命令或函數
    #!/bin/evn sh function errtrap() { echo "[LINE:$1] Error: Command or function exited with status $?"
    } function foo() { return 0; } function bar() { return 1; } trap 'errtrap $LINENO' ERR zxc foo bar

     

     

  3. DEBUG
    通過捕獲DEBUG信號,我們只需要一條trap語句就可以完成相關變量的全程跟蹤
    #!/bin/env sh trap 'echo "before execute line:$LINENO,a=$a,b=$b,c=$c" ' DEBUG a=1 if [[ $a -eq 1 ]] then b=2 else b=1 fi c=3 echo '############################'

     

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM