2014-09-05 5 views
0

저는 bash 쉘 스크립팅과 새로운 문제에 직면 해 있습니다.배시 변수 값을 설정하지 않았습니다.

나는이 같은 코드를 가지고 :

function build() 
{ 

    echo "Building: " | tee -a $LOG_FILE 
    { 
     #do some processing here and if error set the err var to say 2 
     if [[ $err -eq 2 ]]; then 
      echo "Error: exit" 
      exitStatus=2 
     fi 
    } 2>&1 | tee -a $LOG_FILE | grep -e "$GREP_FAIL_TERM" -e "$GREP_ERROR_TERM" 
} 

GREP_FAIL_TERM='[Ff]ail' 
GREP_ERROR_TERM='[Ee][Rr][Rr][Oo][Rr][,;:\ ]' 

exitStatus is a global variable set to 0 at the beginning of script 

나는 오류가 발생하는 경우에이 기능 나오고 exitStatus의 값을 확인

0시입니다. | 상위에 반영되지 않은 서브 쉘에서 명령을 실행합니다. 그렇다면 로그 파일로 출력하는 동안 어떻게 위 코드를 실행할 수 있습니까?

+0

정말 !! 문제가 무엇인지 알지 못합니다. –

+1

파이프는 하위 셸을 도입합니다. 하위 셸은 부모 셸에서 변수를 설정할 수 없으므로'exitStatus'는 하위 셸에서 이스케이프 할 수 없습니다. –

답변

0

예, 어려운 시나리오입니다.

가장 쉬운 방법은 마커를 서브 쉘 스크립트의 출력에 넣고 그 존재에 따라 상태를 결정하는 것입니다.

이미 grep 오류가 있습니다 (비록 grep -i이 좋은 친구가 되겠지만). 그 반환 코드는 오류를 나타냅니다.

function build() 
{ 
    { 
     echo "Building: " 
     # do stuff 
    } 2>&1 | tee -a $LOG_FILE | grep -Ei "fail|error[,;: ]" 
    SUCCESS=$? # 0 if an error was detected 
} 
관련 문제