2014-12-15 2 views
1

У меня есть следующий скрипт, в котором я вызываю функцию из файла «lib». Он работает нормально. Но как реализовать обработку исключений, чтобы, если я изменяю имя функции в файле сценария или в файле «lib», и функция не вызывается, сценарий должен быть прерван.Как проверить, не была ли функция вызвана в сценарии оболочки

файла сценария:

#!/bin/bash 

#Include Functions file 
. ./testlibrary.lib 
echo "Start" 
testFunction 
echo "Finish" 

LibraryFile:

#!/bin/bash 



testFunction(){ 

    echo "testing begins" 

    echo "testing ends" 

} 

Примечание:

Я не могу использовать "установить -e" флаг так есть ли другой способ реализовать это, что, если моя команда не работает, она должна съел сценарий.

+0

Почему вы не можете использовать 'set -e'? Вы, вероятно, должны .... –

ответ

1

Вы можете увидеть, если функция заранее существует с typeset:

if [[ -z "$(typeset -f testFunction)" ]] ; then 
    echo Cannot find testFunction 
    exit 
fi 
testFunction 

Это немного ляп, но это, кажется, работает хорошо с моим минимальным тестированием на сегодняшний день. Тем не менее, вам может понадобиться следить за краевыми случаями.

0

Вы могли бы использовать:

if ! testFunction 
then echo "testFunction not found" 
    exit 
fi 

до тех пор, как функция сама по себе никогда не выходит с ошибкой.

+0

Я пробовал ваш подход, но он не работает. Я думаю, что с синтаксисом что-то не так. –

+0

Это работает для меня. – Barmar

0

Вы можете проверить, если вызов функции неудачен в целом, как это:

testFunction || exit 1 

Обратите внимание, что это не различает случай «функции не найден» от «функции не удалось.» Если вам нужно сделать, это сделать перед вызовом функции:

type -t testFunction >/dev/null || exit 1 
testFunction # definitely exists, could still fail but we'll ignore that 
Смежные вопросы