2015-07-03 3 views
11

у меня есть прерывание ошибки следующим образом:Как untrap после команды ловушки

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 
} 

Существует часть моего кода, где я ожидаю ошибку:

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

В целом мне нужно игнорировать ловушку во время выполнения command4_which_expects_error

набор + е не кажется, чтобы отключить ловушка. Любые другие способы «развязать», а затем «перехватить»?

ответ

18

Вот что вы можете найти в ловушки руководство:

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

Это означает, что он не запускается set -e , но выполняется в тех же условиях. Добавление set -e в ловушка на ERR заставит ваш скрипт выйти после запуска ловушки.

Чтобы удалить ловушку, используйте:

trap - [signal] 
1

Вы можете использовать эту trap сбросить trap установить ранее:

trap '' ERR 
+2

'помощь trap' говорит использование' ' '', чтобы игнорировать,' -' для сброса по умолчанию поведение. –

0

Чтобы игнорировать провал команды, которые вы знаете, не получится, вы можете вызвать линии всегда удается путем добавления || true.

Пример:

#!/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 
Смежные вопросы