2015-07-03 20 views
11

bir tuzak komutun ardından untrap nasılşöyle bir hata tuzak var

command1 
command2 
command3 
set +e #deactivates error capture 
command4_which_expects_error 
set -e #re-activates error capture 
command5 

Genel gerekir:

trap failed ERR 
function failed { 
    local r=$? 
    set +o errtrace 
    set +o xtrace 
    echo "###############################################" 
    echo "ERROR: Failed to execute" 
    echo "###############################################" 
    # invokes cleanup 
    cleanup 
    exit $r 
} 

bir hata bekliyoruz benim kod parçası vardır command4_which_expects_error yürütülürken tuzak görmezden

set + e devre dışı görünmüyor tuzak. "Geri al" ve sonra "yeniden tuzak" için başka yollar?

cevap

18

Eğer tuzak kılavuzunda bulabilirsiniz budur ama aynı koşullarda yürütülür. set -e, ERR üzerindeki trap ekleme, komut dosyasını çalıştırdıktan sonra komut dosyanızın çıkmasını sağlar.

bir tuzak, kullanımını kaldırmak için:

trap - [signal] 
1

ayarlayabilir önceki trap sıfırlamak için bu trap kullanabilirsiniz:

The KornShell uses an ERR trap that is triggered whenever set -e would cause an exit.

o set -e tetiklediği anlamına gelir:

İşte
trap '' ERR 
+2

'yardım trap' davranışını varsayılan sıfırlamak için kullanılmasını' ' '-'' görmezden diyor sonuç. –

0

Eğer başarısız olur bildiğiniz bir komut başarısızlığı görmezden için, çizgi her zaman || true ekleyerek başarılı olmak neden olabilir.

Örnek:

#!/bin/bash 

set -e 

failed() { 
    echo "Trapped Failure" 
} 
trap failed ERR 

echo "Beginning experiment" 
false || true 
echo "Proceeding to Normal Exit" 

Beginning experiment 
Proceeding to Normal Exit