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