В своих сценариях Bash я хотел бы убедиться, что сценарий завершает работу, как только возникает ошибка. (Например, чтобы избежать ошибочного rm -f *
после неудачного cd some_directory
.) По этой причине я всегда использую флаг -e
для bash.
Теперь я хотел бы также выполнить некоторый код очистки в некоторых из моих сценариев. Из этой записи в блоге я собрал
#!/bin/bash
cd invalid_directory
echo ':('
function clean_up {
echo "> clean_up"
exit 0
}
trap clean_up EXIT
Результат, который я получаю,
./test.sh: line 3: cd: invalid_directory: No such file or directory
:(
> clean_up
поэтому он делает то, что рекламируется. Однако при использовании -e
для bash я получаю только
./test.sh: line 3: cd: invalid_directory: No such file or directory
поэтому сценарий завершается без вызова clean_up
.
Как заставить скрипт bash завершать работу при всех ошибках и каждый раз вызывать скрипт очистки?
set -e
.cd invalid_directory || clean_up
. - person chepner   schedule 31.03.2016trap clean_up ERR
? - person Biffen   schedule 31.03.2016ERR
не помогает. - person Nico Schlömer   schedule 31.03.2016