2011-08-19 8 views
2

추적 bash 스크립트를 실행할 때 "bye!"가 인쇄되지 않습니다. " 더미 함수의 return 문은 bash 스크립트 끝을 초래할 것이며, 왼쪽 스크립트는 생략 할 수 없습니다.함수에서 return 명령문이 bash 스크립트 끝을 초래합니다

#!/bin/bash -ex 

dummy() { 
    if [ $1 -eq 0 ] ; then 
     return 0 
    else 
     return 55 
    fi 
} 

dummy 0 
echo "when input 0, dummy will return $?" 

dummy 50 
echo "when input 50, dummy will return $?" 

echo "bye!" 

출력 : 주위

+ dummy 0 
+ '[' 0 -eq 0 ']' 
+ return 0 
+ echo 'when input 0, dummy will return 0' 
when input 0, dummy will return 0 
+ dummy 50 
+ '[' 50 -eq 0 ']' 
+ return 55 

답변

8

당신의 그녀 - 뱅 라인 : #! -e 옵션은 명령 후 즉시 종료 떠들썩한 파티를 알려줍니다 -ex

그건/빈/bash는 0이 아닌 값을 반환합니다.

$ 1이 55 일 때이 스크립트는 [$ 1 -eq 0]이므로 스크립트가 즉시 종료됩니다. , 감탄사도 작은 따옴표에 문제가있다

$ bash yourscript.sh 

프롬프트에서

$ bash -e yourscript.sh 
+0

gnu bash 매뉴얼에서 -e 옵션을 찾을 수 없습니다. 내가 읽거나 그것에 대해 배울 수있는 참조에 대한 링크가없는 건가요? –

+0

거룩한 괴짜에게 고마워, 이것은 매우 도움이된다 – leon

+0

@Qsp 그것은 bash 매뉴얼에있다. 관련 단락을 보려면 bash 쉘에서 다음을 실행하십시오. man bash | col -b | grep -A3 'OPTIONS'; 남자 bash | col -b | grep -A 2 - '-e * Exit' – holygeek

-2

를 사용하여 작은 따옴표 '안녕!'. 큰 따옴표를 사용하면 "!" 문제가 발생합니다.

+0

: 대하지만, 스크립트 파일, 그들은 아니에요 :

은 다음과 같이 당신에게 스크립트를 실행 해보십시오. 프롬프트에서 느낌표는 csh와 같은 기록 대체 메커니즘 (die, csh! die, csh의 내역 대체 메커니즘!)에 의해 사용됩니다. – tripleee

0

변화에

#!/bin/bash -ex 

:

#!/bin/bash 

하고 작동합니다.

사실은 #!/bin/bash -x으로도 가능합니다.

-e 옵션을 사용하여 다른 작업을 수행하려고 했습니까?