запустить код при ошибке - PullRequest
1 голос
/ 02 января 2012

Я поместил

set -e
set -u

в начало моего BASH-скрипта, чтобы он не работал, а не продолжал.

Есть ли способ указать какой-то код, который будетзапустить при ошибке?


Если нет лучшего способа, я могу сделать из своей программы a три файла:

a
.a
.a_onfail

и иметь a просто

# headers etc
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
$(DIR)/.a || $(DIR)/.a_onfail

Ответы [ 3 ]

2 голосов
/ 02 января 2012

Вы пробовали:

trap ... ERR

Если sigspec - ERR, команда arg выполняется всякий раз, когда простая команда имеет ненулевой статус выхода,

2 голосов
/ 02 января 2012

Кажется, что trap '...' ERR не работает с неустановленными переменными.

Вы можете использовать подоболочку вместо двух отдельных файлов скриптов:

#!/bin/sh -eu

main() {
  echo "$X"
}

on_failure() {
  echo "Failure"
}

(main) || on_failure
1 голос
/ 02 января 2012

Вы можете попытаться решить эту проблему, используя trap . Например: trap "ERROR=1" ERR и trap '[ "$ERROR" = "1" ] && on_error' EXIT, а затем предоставить функцию on_error.

...