2012-09-04 5 views
3

아래 bash는 스크립트출구 bash는

#!/bin/bash 
set -x 
function doSomething() { 
    callee 
    echo "It should not go to here!" 
} 

function callee() { 
    (echo "before") && (echo "This is callee" && exit 1)                     
    echo "why I can see this?" 
} 


doSomething 

이며,이 결과는 ...

+ set -x 
+ doSomething 
+ callee 
+ echo before 
before 
+ echo 'This is callee' 
This is callee 
+ exit 1 
+ echo 'why I can see this?' 
why I can see this? 
+ echo 'It should not go to here!' 
It should not go to here! 
내가 명령 "exit"를 보았다

,

하지만하지 않았다 출구에서 작동하지 않습니다 스크립트를 종료하십시오.

종료가 작동하지 않는 이유는 무엇입니까?

답변

5

서브 쉘 내부에서 exit으로 전화를 걸면 종료됩니다. 다음과 같이 대신 시도하십시오.

function callee() { 
    (echo "before") && { echo "This is callee" && exit 1; }                     
    echo "why I can see this?" 
} 

그러나 이것은 callee이라는 쉘에서 종료됩니다. 함수에서 돌아가려면 exit 대신 return을 사용하는 것이 좋습니다.

3

()에서 명령을 실행하면 하위 셸이 생성됩니다. 따라서 서브 쉘에서 exit으로 전화를 걸면 방금 끝나고 최상위 스크립트가 종료됩니다.

0

라운드 paredenthesis가 exit로 종료되는 새로운 중첩 쉘을 작성하기 때.입니다.