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를 사용하는 습관을 버리세요.