trap命令Linux

 

trap命令用于捕获指定的信号并执行预定义的命令,为shell内置命令

trap命令Linux

 

 有两个常用选项

trap命令Linux

 

 

 

基本语法:

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命令Linux

     

     
    需要对trap后的command加''进行保护,否则LINENO在第六行就会被替换,输出的行号LINENO==1,是因为进到函数vbn执行的时候打开了子shell,LINENO是按照子shell来计数,执行完echo命令后,立即调用了全局errtrap函数(此时,仍在子shell中)
    下面为使用""的情况
    trap命令Linux

     

     

  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

    trap命令Linux

     

     

  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 '############################'

    trap命令Linux

     

     

上一篇:linux内核-中断向量表IDT的初始化


下一篇:js 补零方法,如果不足位数