我正在尝试使用zenity / yad为wget下载过程提供某种GUI。我想出了这个:
wget http://example.com/ 2>&1 | \
sed -u 's/^[a-zA-Z\-].*//; s/.* \{1,2\}\([0-9]\{1,3\}\)%.*/\1\n#Downloading... \1%/; s/^20[0-9][0-9].*/#Done./' | \
zenity --progress --percentage=0 --title=Download dialog --text=Starting... --auto-close --auto-kill
现在,假设wget遇到错误。我需要通知用户下载失败。由于$?
变量似乎的值0
无论成功或失败(可能因为$?
存储zenity的退出状态?),我无法判断下载是否失败或成功了。
如何纠正上述问题?
答案 0 :(得分:3)
你可以说:
set -o pipefail
这样说会导致$?
报告管道中最后一个命令的退出代码以退出非零状态。
pipefail
如果设置,管道的返回值是以非零状态退出的最后(最右边)命令的值,如果全部则为零 管道中的命令成功退出。此选项被禁用 默认值。
此外,数组PIPESTATUS
将报告管道中所有命令的返回码。话说:
echo "${PIPESTATUS[@]}"
会列出所有这些。例如,它显示3个数字,例如
1 0 0
如果wget
失败。
引用manual:
PIPESTATUS
一个数组变量(请参阅Arrays),其中包含最近执行的前景中进程的退出状态值列表 管道(可能只包含一个命令)。