Exit Status
2022.07.05 - [Shell Script] Exit Status - 1 에 이어서 작성한다.
pipe로 연결된 명령의 종료 상태 값
pipe로 여러 명령이 연결되어 실행될 때는 마지막 명령의 종료 상태 값이 사용된다. 아래 명령문의 경우 command1의 성공 여부와 상관없이 sed는 항상 참을 반환하기 때문에, 항상 종료 상태 값으로 0을 반환한다.
command1 arg1 arg2 | sed -n '/<main>:/,/^$/p'
command1 명령 실패 시 비정상 종료 상태 값을 반환하려면, 파이프에 연결된 명령 중 하나라도 오류가 생길 경우 비정상 종료 상태 값을 반환하는 pipefail 옵션을 사용해야 한다. sh에서는 pipefail을 사용할 수 없으므로, 명령을 분리하거나 redirections를 이용할 수 있다.
(
set -o pipefail
command1 arg1 arg2 | sed -n '/<main>:/,/^$/p'
)
# 명령 분리
command1 arg1 arg2 > tmpfile
status=$?
sed -n '/<main>:/,/^$/p' tmpfile
echo $status
null 값인 변수는 참일까 거짓일까?
존재하지 않은 변수나 null 값인 변수는 quote하지 않으면 참이 된다.
대입 연산의 종료 상태 값은?
=. += 메타 문자를 이용한 식은 명령문이 아니기 때문에 ;로 구분하지 않고 한 줄에 여러 개를 작성할 수 있다. 종료 상태 값은 항상 0이지만, 명령 치환과 함께 사용되면 명령 치환 종료 상태 값이 적용된다.
기본값
명령 치환 시