쉘 스크립트의 오류가 발생한 곳에서 비정상적으로 종료하고 싶습니다.

1556 단어 ShellScriptBash

도전



쉘 스크립트는, 도중의 커멘드로 에러가 발생해도 그 자리에서는 종료하지 않고, 게다가 쉘 스크립트 자체의 종료 스테이터스도 0 (正常終了) 입니다.
예를 들어, 다음 쉘 스크립트는 중간 false 명령이 오류를 반환하지만 마지막 echo "[Finish]"가 실행 중이며 종료 상태도 0 (正常終了)입니다.

test1.sh
#!/bin/bash
false
echo "[Finish]"
$ ./test1.sh; echo $?
[Finish]
0

이것은 올바른 거동이지만 경우에 따라
  • 어딘가에서 오류가 발생하면 그 자리에서 멈추고 싶습니다
  • 종료 상태도 0 이외를 돌려주었으면 한다

  • 라고 하는 일도 있습니다.

    다음은 해결책입니다.

    해결책



    1. shebang 에 -e 옵션을 붙인다



    test2.sh
    #!/bin/bash -e
    false
    echo "[Finish]"
    
    $ ./test2.sh; echo $?
    1
    

    도중에 이상종료 ( 예상대로 )

    2. set -e 명령



    test3.sh
    #!/bin/bash
    set -e
    false
    echo "[Finish]"
    
    $ ./test3.sh; echo $?
    1
    

    도중에 이상종료 ( 예상대로 )

    좋은 웹페이지 즐겨찾기