Bash 结合wget和zenity/yad
我试图通过使用zenity/yad为wget下载过程提供某种GUI。我想到了这个:Bash 结合wget和zenity/yad,bash,shell,sh,wget,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 d
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的退出状态?),因此我无法判断下载是失败还是成功
如何纠正上述问题?您可以说:
set -o pipefail
这样说会导致$?
报告管道中最后一个命令的退出代码,以非零状态退出
引述自:
pipefail
如果设置,管道的返回值是最后一个(最右边)以非零状态退出的命令的值,如果全部为零,则返回值为零
管道中的命令成功退出。此选项已被禁用
默认
此外,数组
PIPESTATUS
将报告管道中所有命令的返回代码。说:
echo "${PIPESTATUS[@]}"
我会列出所有这些。例如,它将显示3个数字,例如
100
如果wget
失败
引述:
管道状态
一个数组变量(请参见数组),其中包含最近执行的前台进程的退出状态值列表
管道(可能只包含一个命令)
我认为您需要编写一个包含中间文件的脚本,以便捕获中间状态