![if 문의 변수로 명령 오류 리디렉션](https://linux55.com/image/129522/if%20%EB%AC%B8%EC%9D%98%20%EB%B3%80%EC%88%98%EB%A1%9C%20%EB%AA%85%EB%A0%B9%20%EC%98%A4%EB%A5%98%20%EB%A6%AC%EB%94%94%EB%A0%89%EC%85%98.png)
if 문 내에서 명령 오류를 리디렉션해야 하는 스크립트를 만들고 있습니다.
ERROR=""
if tar -xf $1 -C $2/$DIR_NAME 2> $ERROR;
then
echo "Done"
else
rm -rf $2/$DIR_NAME
echo "Errors during execution:"
echo $ERROR
fi
그래서 기본적으로 스크립트를 실행할 때 오류가 발생한 tar
경우에만 이 명령을 인쇄하고 싶습니다 .echo "Errors during execution:"
line 20: $ERROR: ambiguous redirect
이 목표를 어떻게 달성할 수 있나요?
답변1
텍스트를 변수로 리디렉션할 수 없으며 이를 캡처해야 합니다. 그러나 stdout 대신 stderr 텍스트를 유지하고 싶습니다.
if error=$( tar -xf "$1" -C "$2/$dir_name" 2>&1 1>/dev/null ); then ...
if
tar의 종료 상태에 따라 작동합니다.
ALL_CAPS_VARNAMES를 사용하는 습관을 버리세요.