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

i olsun çıkış kodu yakalayan çıkışını -> deneme kodunda iç Ama bekliyordum -> deneme kodunda içindeki Trapp sonra Neden isnt tuzak 'testttt '2 yakalama testttt()Tuzak i komut dosyası çalıştırdığınızda

cevap

1

senaryonuz SIGINT (sinyal 2), hiçbir zaman bu durumla çıktığında alırsa Kişisel tuzak sadece yürütür 2.

Bunun yerine, EXIT kodunu almalı ve işleyicinizin içindeki çıkış durumunu sınamanız gerekir.

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

ve EXIT yerine 0 koyarsam aynı şey mi? – prajwal

0

Ekleme ne koşu senaryoya kesme bu şekilde gönderebilir cevap @chepner için: $$ Senaryonuzun PID olacak

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

.

İlgili konular