wget和zenity/yad的组合



我正试图通过使用zenity/yad为wget下载过程提供某种GUI。我想出了这个:

wget http://example.com/ 2>&1 | 
sed -u 's/^[a-zA-Z-].*//; s/.* {1,2}([0-9]{1,3})%.*/1n#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的退出状态?),我无法判断下载是失败还是成功。

如何纠正上述问题?

您可以说:

set -o pipefail

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

引用The Set Builtin:

pipefail

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


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

echo "${PIPESTATUS[@]}"

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

1 0 0

如果CCD_ 7失败。

引用手册:

管道状态

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

相关内容

  • 没有找到相关文章

最新更新