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を使用する習慣を捨ててください。

関連情報