![将命令错误重定向到 if 语句中的变量](https://linux22.com/image/129522/%E5%B0%86%E5%91%BD%E4%BB%A4%E9%94%99%E8%AF%AF%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0%20if%20%E8%AF%AD%E5%8F%A5%E4%B8%AD%E7%9A%84%E5%8F%98%E9%87%8F.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
您无法将文本重定向到变量中,您需要捕获它。但是您想保留 stderr 文本而不是 stdout:
if error=$( tar -xf "$1" -C "$2/$dir_name" 2>&1 1>/dev/null ); then ...
if
将作用于 tar 的退出状态。
改掉使用 ALL_CAPS_VARNAMES 的习惯。