Скрипт обертки для выхода из основного скрипта с отладкой - PullRequest
4 голосов
/ 23 февраля 2011

У меня есть сценарий bash, который запускает несколько команд по порядку и останавливается, если одна из них возвращает ненулевой код ошибки и отображает номер строки, чтобы помочь найти команду.

После каждой команды я запускаю функцию (exitIfLastCommandReturnCodeNotZero), который проверяет, был ли код выхода в порядке, и если нет, отображает номер строки и код ошибки.Например:

..
cmd1 param1 param2 ; exitIfLastCommandReturnCodeNotZero $? $LINENO
cmd2 param1 param2 ; exitIfLastCommandReturnCodeNotZero $? $LINENO
cmd3 param1 param2 ; exitIfLastCommandReturnCodeNotZero $? $LINENO
..

Это хорошо работает, но есть ли встроенная функция или скрипт, который может просто обернуть команды и дать мне ту же функциональность?Например:

..
wrapperScript cmd1 param1 param2
wrapperScript cmd2 param1 param2
wrapperScript cmd3 param1 param2
..

или, что еще лучше, функция уровня «блок», которая запускает все команды и завершает работу в случае сбоя одной из команд.Например:

WRAPPERSCRIPT_PSEUDOCODE {
..
cmd1 param1 param2
cmd2 param1 param2
cmd3 param1 param2
..
}

В идеале выходные данные при сбое команды должны также включать (помимо номера строки) имя команды и параметры.

Ответы [ 2 ]

2 голосов
/ 23 февраля 2011

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

#!/bin/bash
function error
{
   local err=$?
   echo "error# $err on line $BASH_LINENO: $BASH_COMMAND"
   exit $err
}
trap error ERR
 # Some commands ...
echo bar
/bin/false foo # For testing
echo baz

exitIfLastCommandReturnCodeNotZero серьезно?

0 голосов
/ 23 июля 2011

Я бы предложил начать каждый скрипт с set -Eeu.

См. Связанный пост: Обработка ошибок в Bash

...