파이프로 연결된 명령어의 탈출 코드는 마지막 명령어의 값으로 나온다.
따라서 $? 변수를 이용하면 버그가 발생한다.
아래와 같은 방법으로 처리할 수 있다.
chatgpt가 알려줌. 예전에 스택오버플로에서 찾다가 말았었는데. 한 방에 알려준다.
거짓말인가 테스트는 역시 필요하다. 스택오버플로와 마찬가지로.
ls | tail | head
ret=${PIPESTATUS[@]}
if ["$ret" != "0 0 0" ]; then
echo "not ok"
else
echo "ok"
fi
또는
ret=("${PIPESTATUS[@]}")
echo ${exit_codes[0]}
echo ${exit_codes[1]}
echo ${exit_codes[2]}