2015-05-11 39 views
3

有关于multiple bash traps for same signal的问题。那么相反的版本呢?可能写这样的事:在bash中使用一个陷阱处理多个信号

sighand() { 
    case $1 in 
    1) 
     echo "CATCH: SIGHUP" 
     ;; 
    2) 
     echo "CATCH: SIGINIT" 
     ;; 

    ... 
    # ALL EXCEPT 9 
    ... 

    esac 
}; 

trap sighand ALL 

,而不是这样的:

sighand() { 
    echo "CATCH: TERM" 
}; 
trap sighand TERM 
+0

这是不可能的,我们不能确定在shell脚本接收到信号。对于多个信号,您可以使用单个命令,但我们无法区分它们。 –

回答

4

你会写每个信号单独的函数:

handle_hup() { 
    echo "CATCH: SIGHUP"; 
} 
handle_int() { 
    echo "CATCH: INT"; 
} 

trap handle_hup HUP 
trap handle_int INT 

正如你可以写一个解决办法自定义函数为您设置所有陷阱。然后,你会调用该函数与所有要处理的信号:_trap [sig1] [sig2] ...

handle_sig() { 
    case "$1" in 
    HUP) 
     echo "CATCH: SIGHUP" 
     ;; 
    INT) 
     echo "CATCH: SIGINIT" 
     ;; 
    *) 
     echo "CATCH: SIG$1" 
     ;; 
    esac 
} 

_trap() { 
    for sig in "[email protected]" 
    do 
    trap "handle_sig $sig" "$sig" 
    done 
} 

_trap INT HUP USR1