유 닉 스/리 눅 스 셸 스 크 립 트 의 "set - e"역할

'set - e' 가 뭐 예요?
다음 스 크 립 트:
#!/bin/bash
set -e
command 1
command 2
...

스 크 립 트 시작 에 set - e 를 추가 하면 이 문 구 는 bash 에 게 모든 문장의 실행 결과 가 true 가 아니라면 종료 해 야 한 다 는 것 을 알려 줍 니 다.
'set - e' 역할 이 뭐 예요?
  • (1) - e 를 사용 하여 오 류 를 검사 하 는 데 도움 을 줍 니 다.
  • (2) 오류 가 눈 덩이 처럼 커지 는 것 을 방지 하여 치 명 적 인 오 류 를 초래 하 는데 이런 오 류 는 전에 처리 되 어야 한다.
  • (3) 가 독성 을 높이 려 면 set -o errexit 을 사용 할 수 있 는데 그 역할 은 set -e 과 같다.

  • 'set - e' 폐단 이 뭐 예요?
  • (1) 검사 할 수 없습니다 $?. 실 행 된 문구 가 0 으로 돌아 가지 않 으 면 bash 는 검사 코드 를 실행 할 수 없습니다. 아래 스 크 립 트 와 같 습 니 다.
    #!/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/
    ...
    이 몇 줄 의 hadop 명령 논 리 는 간단 합 니 다. hdfs 에서 디 렉 터 리 를 지우 고 새로 만 들 고 로 컬 파일 을 이 디 렉 터 리 로 전송 하여 나중에 사용 할 수 있 습 니 다.이 몇 줄 의 목록 을 꺼 내 명령 행 에서 실행 합 니 다. 삭제 할 디 렉 터 리 가 존재 하지 않 는 다 는 것 을 알 리 는 것 외 에 문제 가 없습니다. 파일 은 지정 한 곳 으로 보 내 집 니 다.그러나 이 스 크 립 트 를 처음 실 행 했 을 때 종료 에 실 패 했 고 이 스 크 립 트 를 호출 하 는 프로그램 이 전체적으로 종료 되 어 심각 한 결 과 를 초래 했다.hdfs 에 이 디 렉 터 리 가 없 기 때문에 rmr 이 줄 은 255 로 돌아 갑 니 다. 이 값 은 스 크 립 트 앞의 "set - e"에 의 해 포착 되 어 스 크 립 트 가 종 료 됩 니 다.설명 하 다.⚠️: 이 를 통 해 알 수 있 듯 이 'set - e' 를 설정 하면 스 크 립 트 개발 과정 에서 도움 이 될 수 있 고 개발 이 끝 난 후에 특히 후기 에 업 그 레이 드 될 수 있 는 스 크 립 트 는 안전 위험 을 묻 었 을 수 있 습 니 다.

  • 참고 문서
  • (1) 작은 말 형 -- 유 닉 스/리 눅 스 스 크 립 트 에서 "set - e"의 역할
  • (2)Mr_sheng -- Unix/Linux 셸 스 크 립 트 의 "set - e"역할
  • 좋은 웹페이지 즐겨찾기