Условные действия, основанные на ошибке в сценарии оболочки - PullRequest
1 голос
/ 22 октября 2010

У меня есть скрипт bash, который смотрит каталог для загрузки.Когда он видит XML-файл в каталоге.Сценарий берет файл и вызывает программу командной строки Java, которая с помощью xslt преобразует файл.Я хочу переместить файл в другой каталог (ошибки), если сценарий или программа командной строки Java выдают ошибку во время обработки.Тогда напишите мне об ошибке.

Я собирался поместить exec 2> mail -s 'Error Error Processing'

вверху скрипта, чтобы перехватить вывод для stderr.Но это не выглядит очень элегантно и не перемещает файл, о котором идет речь.

Ответы [ 2 ]

5 голосов
/ 22 октября 2010

Вы можете перехватить условия ошибки в bash (любой оператор, который возвращает ненулевое условие, которое не обрабатывается в строке):

trap func ERR

Затем в func (функция, которую вы определяете) вы можете делать все, что вам нужно для очистки.

Например:

#!/bin/bash

function foo() {
    echo "cleaning up"
}

trap foo ERR

echo "about to execute false"

false

echo "exiting"

Запуск, который приведет к:

./foo.sh
about to execute false
cleaning up
exiting
3 голосов
/ 22 октября 2010

Вам нужны две вещи здесь.Во-первых, определить, если программа не работает.Это обычно известно по возвращаемому значению функции main() программы.Если программа возвращает что-либо, отличное от 0, возникает ошибка.

В любом случае, второе, что вам нужно сделать, это перехватить стандартный вывод ошибки в файл для последующей отправки по почте.Итак:

if ! program inputfile 2> errorfile ; then
    mv inputfile error_directory
    mail -s "error" < errorfile
fi
rm errorfile

Вы должны проверить, однако, если ваша программа следует этому соглашению, чтобы сигнализировать об ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...