2015-05-11 37 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