结合wget和zenity / yad

时间:2014-01-17 10:00:36

标签: bash shell sh wget

我正在尝试使用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的退出状态?),我无法判断下载是否失败或成功了。

如何纠正上述问题?

1 个答案:

答案 0 :(得分:3)

你可以说:

set -o pipefail

这样说会导致$?报告管道中最后一个命令的退出代码以退出非零状态。

引自The Set Builtin

  

pipefail

     

如果设置,管道的返回值是以非零状态退出的最后(最右边)命令的值,如果全部则为零   管道中的命令成功退出。此选项被禁用   默认值。


此外,数组PIPESTATUS将报告管道中所有命令的返回码。话说:

echo "${PIPESTATUS[@]}"

会列出所有这些。例如,它显示3个数字,例如

1 0 0

如果wget失败。

引用manual

  

PIPESTATUS

     

一个数组变量(请参阅Arrays),其中包含最近执行的前景中进程的退出状态值列表   管道(可能只包含一个命令)。