행동 유닉스 / 리눅스 쉘 스크립트의 "-e 설정"

무엇 예 "-e 설정"?

다음 스크립트 :

#!/bin/bash
set -e
command 1
command 2
...

명령문의 결과가 사실이 아닌 경우 스크립트 플러스 설정 -e의 시작 부분에서 문장 문이 떠들썩한 파티를 알려줍니다, 당신은 종료한다.

어떤 역할 "-e 설정"?

  • (1) 당신이 오류를 확인하려면 -e 도움을 사용하여;

  • (2) 오류가 증가가 심각한 오류를 야기하고, 오류가 폐기되기 전에 있어야 급증 방지;

  • (3)의 가독성을 높이기 위하여,이 사용될 수 set -o errexit있으며, 행 set -e동일;

무슨 "로 설정 -e"단점?

  • (1) 확인할 수 없습니다 $?명령문이 0을 반환 실행되지 않으면, 배쉬는 다음 스크립트 모양의 체크 코드를 수행 할 수 없기 때문에, :

    #!/bin/bash
    set -e
    ...
    command  <== 执行的语句不是返回0,bash将不会往下执行if语句
    if [ $? -eq 0 ];then   
    echo "command failed";   
    exit 1;   
    fi
  • 다음 (2)의 코드는, 예를 들면 실행할 수 없습니다 하여금

    #!/bin/bash
    set -e
    ...
    /home/work/.../hadoop dfs -rmr /app/.../dir
    /home/work/.../hadoop dfs -mkdir /app/.../dir
    /home/work/.../hadoop dfs -put file_1 /app/.../dir/
    ...

    이 라인 하둡 명령 논리는 간단하다 명확하고 HDFS에 새 디렉토리를 만들고, 나중에 사용하기 위해 로컬 디렉토리에 파일을 밀어 넣습니다. 혼자이 라인은 수행 존재하지 않는 디렉토리를 삭제 제안 이외에, 명령 줄을 실행하고 문제는 파일이 여전히 지정된 장소에 푸시됩니다 없다.

    그러나 첫 번째 스크립트의 실행,하지만 실패에서 철수하고, 전체 프로그램은 심각한 결과를 초래 스크립트 종료를 호출에 이끌 때. 그 이유는이 값이 캡처 "-e 설정"스크립트의 앞에, HDFS 아직이 디렉토리,이 라인은 255 반환 RMR 아니라, 스크립트의 직접적인 결과는 종료됩니다.

    설명 ⚠️ :

    "-e 설정"눈에 보이는 세트, 스크립트 개발 프로세스에 도움이 될 수 있으며, 개발이 완료되면, 특히, 보안 위험을 매장 할 수있다 후자 스크립트를 업그레이드 할 수 있습니다.

참조 문서

추천

출처blog.51cto.com/wutengfei/2428217