ENV

2014-12-02 6 views
6

에서 -e가 설정되지 않은 경우에도 첫 번째 0이 아닌 결과 이후에 종료되는 배쉬 스크립트 한 줄이 0이 아닌 결과를 반환하면 이전에 사용한 모든 시스템에서 간단한 bash 스크립트가 계속됩니다. 일부 새로운 Ubuntu LTS 14.x 시스템은 첫 번째 실패시 종료됩니다. 내가 사용했습니다ENV

echo $- 

전자가 목록에 표시되지 않습니다. 또 내가 무엇을 찾고 있어야합니까? 코멘트에서

추가 :

$ declare -f command_not_found_handle 
command_not_found_handle() 
{ 
    if [ -x /usr/lib/command-not-found ]; then 
     /usr/lib/command-not-found -- "$1"; 
     return $?; 
    else 
     if [ -x /usr/share/command-not-found/command-not-found ]; then 
      /usr/share/command-not-found/command-not-found -- "$1"; 
      return $?; 
     else 
      printf "%s: command not found\n" "$1" 1>&2; 
      return 127; 
     fi; 
    fi 
} 
+1

'-f command_not_found_handle' 출력 결과는 무엇입니까? –

+0

예, 결과는 예상대로입니다. [command_not_found_handle() { if [-x/usr/lib/command-not-found]; then /usr/lib/command-not-found - "$ 1"; return $ ?; else [-x/usr/share/command-not-found/command-not-found] 인 경우; then /usr/share/command-not-found/command-not-found - "$ 1"; return $ ?; else printf "% s : 명령을 찾을 수 없습니다. \ n" ""$ 1 "1> & 2; return 127; fi; fi } –

+1

그래서 스크립트가 0이 아닌 값을 반환하거나 스크립트를 찾을 수없는 경우 사용할 수없는 명령을 사용하려고하면 스크립트가 종료됩니다. 스크립트 종료 코드는 무엇입니까? 스크립트의 어느 시점에? 'set -x'는 당신에게 무엇을 보여줍니까? –

답변

1

이 스크립트에서 떠들썩한 트랩를 사용 bash는 스크립트 아래의 예를 참조하십시오 당신이 존재하지 않는 명령을 실행하려고하면

#!/usr/bin/bash 

main() { 
    trap 'error_handler ${LINENO} $?' ERR 
    ###### put your commands in the following 
    echo "START" 

    non_existent_command 

    echo "END" 
} 

error_handler() { 
    process="$0" 
    lastline="$1" 
    lasterr="$2" 
    printf 'ERROR: %s: line %s: last command exit status: %s \n' "$process" "$lastline" "$lasterr" 
    trap - ERR 
    exit 0 
} 

main 

을 (예에서 non_existent_command) 또는 종료 상태가 0이 아닌 명령을 사용하면 트랩이 exit 0이라는 종료 명령을 포함하는 기능을 활성화합니다. 상기 출력 샘플 가 될 것이다 : 안 "END"인쇄 "시작"그러나

>START 
>./new.sh: line 8: non_existent_command: command not found 
>ERROR: ./new.sh: line 8: last command exit status: 127 

참고.