2016-04-01 101 views
1
testttt(){ 
    echo after trapp 
    } 
    test(){ 
    echo inside testcode 
    exit 2 
    } 
    trap 'testttt' 2 
    test 

當我運行該腳本,我得到的輸出 - >內testcode 但我期待 - >內testcode 特拉普後 爲什麼心不是陷阱「testttt 「2捕獲testttt()陷阱在Linux腳本沒有捕捉退出代碼

回答

1

你的陷阱只有當你的腳本接收SIGINT(信號2),沒有任何時間與狀態退出執行2.

相反,您應該設置EXIT,然後測試處理程序中的退出狀態。

testttt(){ 
    exit_status=$? 
    if [[ $exit_status -eq 2 ]]; then 
     echo after trapp 
    fi 
} 
test(){ 
    echo inside testcode 
    exit 2 
} 
trap 'testttt' EXIT 
test 
+0

如果不是EXIT如果我把0是同樣的事情? – prajwal

0

添加到@chepner回答您可以中斷髮送到您的行書是這樣的:

testttt(){ 
    echo after trapp 
    } 
    test(){ 
    echo inside testcode 
    kill -s SIGINT $$ 
    } 
    trap 'testttt' 2 
    test 

$$將有腳本的PID。