Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 结合wget和zenity/yad_Bash_Shell_Sh_Wget - Fatal编程技术网

Bash 结合wget和zenity/yad

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

我试图通过使用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的退出状态?),因此我无法判断下载是失败还是成功

如何纠正上述问题?

您可以说:

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

引述自:

pipefail

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


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

echo "${PIPESTATUS[@]}"
我会列出所有这些。例如,它将显示3个数字,例如

100

如果
wget
失败

引述:

管道状态

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


我认为您需要编写一个包含中间文件的脚本,以便捕获中间状态