Проверка функции Bash Script - PullRequest
0 голосов
/ 11 июля 2010

Я пытаюсь выполнить проверку для каждой функции, которую я вызываю в сценарии, и вывести из строя весь сценарий в случае сбоя одной функции.

В поисках лучшего способа сделать это.Я чувствую, что когда-то знал хороший способ сделать это, но не могу понять это снова.

Я могу грубо заставить это, но это противно.Вот как я могу заставить его работать правильно

    copy_files $1
    if [ "$?" -ne "0" ]; then
            error "Copying files"
            return -1
    fi

Это становится довольно уродливо, так как у меня есть скрипт, который выглядит так:

command1 command2 command3

Необходимость обернуть всеэти команды с возвратами не очень идеальны.:( Пожалуйста, помогите!

Ответы [ 3 ]

3 голосов
/ 11 июля 2010
command1 || (error "Cmd1 fail"; return -1); command2 || (error "Cmd2 fail"; return -1);

и т.д.. и т. д. Оператор || означает, что следующая команда будет выполнена только в случае неудачи предыдущей команды. && наоборот. Скобки группируют команды для запуска.

1 голос
/ 11 июля 2010

Поскольку вы сказали, что хотите сделать это для каждой команды в сценарии, вы можете вставить

set -e

в начале. Этот вызов заставляет оболочку немедленно завершиться, если какая-либо команда возвращает код состояния, отличный от 0. (Исключения: команды, являющиеся частью теста в условном выражении, и команды, за которыми следуют && или || и другие команды)

0 голосов
/ 11 июля 2010

Вы можете сделать что-то вроде этого:

good() { 
    return 0;
}

bad() {
    return 5;
}

wrapper() { 
    $1  

    rc=$?

    if [ "$rc" -ne "0" ]; then
            echo "error: $1 returned $rc"
            exit -1
    fi  
}


wrapper bad 
wrapper good

или, если вы могли бы передать список функций, например:

wrapper() {
    for f in $*; do

        $f 
        rc=$?

        if [ "$rc" -ne "0" ]; then
                echo "error: $f returned ${rc}"
                return -1
        fi
    done
    return 0;
}


wrapper good bad

if [ "$?" -ne "0" ]; then
    #error handling here
    exit -1;
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...