if 문의 변수로 명령 오류 리디렉션

if 문의 변수로 명령 오류 리디렉션

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 ...

iftar의 종료 상태에 따라 작동합니다.

ALL_CAPS_VARNAMES를 사용하는 습관을 버리세요.

관련 정보