2014-12-15 3 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

당신은 볼 수 있습니다 : 당신이 할 필요가있는 경우,이 함수를 호출하기 전에 그것을 할 지금까지 최소한의 테스트만으로도 충분합니다. 그러나 가장자리의 경우를주의 깊게 관찰하고 싶을 수도 있습니다.

0

당신은 사용할 수 있습니다

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

을 한 자체가 결코 오류로 종료하지 않는 함수로. 함수 호출은 일반적으로 실패하는 경우

+0

나는 당신의 접근 방식을 시도했지만 작동하지 않습니다. 구문에 문제가 있다고 생각합니다. –

+0

그것은 저에게 효과적입니다. – Barmar

0

당신은 다음과 같이 확인할 수 있습니다

testFunction || exit 1 

참고이에서 찾을 수 없습니다 "기능"의 경우를 구분하지 않는 "기능이 실패합니다." 그것은 kludge의 약간의

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

하지만이 작동하는 것 같다 : 함수가 typeset와 사전에 존재하는 경우

type -t testFunction >/dev/null || exit 1 
testFunction # definitely exists, could still fail but we'll ignore that 
관련 문제