명령어 - set [옵션] [옵션명]
리눅스 쉘 스크립트 코드는 디버깅이 없고, 오류가 발생해도 무시하고 진행된다.
이럴 경우 값이 제대로 들어가지 않아 뒤에 코드가 오류가 생기는 경우가 있다.
이럴때 set 옵션을 줘서 디버깅하는 효과를 줄 수 있다.
우선 set를 설명하기 전에 PIPESTATUS에 대해 알아야한다.
https://aif0921.tistory.com/43
리눅스 0, 1 / PIPESTATUS
리눅스에서 0은 성공, 1은 실패이다. true echo $? false echo $? 확인해보면 알 수 있다. 성공 여부는 마지막 실행 문장에 대해서만 저장된다. 그리고 파이프 문으로 연결될 시 파이프가 실패해도 성공
aif0921.tistory.com
set 에는 e, o, u, x 가 많이 사용되는 듯 하다. 다른 옵션은 찾아봐야함
e
일단 e는 스크립트 문법 자체에 문제가 되면 종료하게 된다.
#! /bin/bash
echo first
cat asdasd
echo second
다음과 같이 실행하면 오류는 뜨지만 결국 second 까지 실행이 된다.
#! /bin/bash
set -e
echo first
cat asdasd
echo second
set -e를 추가하면 second는 출력되지 않는다.
그리고 실패를 반환한다.
u
는 e와 다르게 변수에 대한 오류는 찾는다. e는 실행문 자체의 오류라면 u는 선언되지 않는 변수에 엄격하다.
x
는 실행되는 문장을 출력하고 그 결과도 출력한다. 디버깅 모니터링 용인듯
마지막으로
o
는 뒤에 옵션명을 적어주는데 pipefail에 대해 알아보겠다. 다른것도 있나모르겠음
pipefail은 PIPESTATUS와 연관이 있다.
PIPESTATUS에서 하나라도 실패면 실패를 반환하게 한다.
그러면 e에서 실패를 확인하고 종료하게 되는 로직이다.
#! /bin/bash
set -e
echo first
cat asdasd | wc -l
echo second
출력됨
#! /bin/bash
set -eo pipefail
echo first
cat asdasd | wc -l
echo second
출력안됨