将命令错误重定向到 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

您无法将文本重定向到变量中,您需要捕获它。但是您想保留 stderr 文本而不是 stdout:

if error=$( tar -xf "$1" -C "$2/$dir_name" 2>&1 1>/dev/null ); then ...

if将作用于 tar 的退出状态。

改掉使用 ALL_CAPS_VARNAMES 的习惯。

相关内容