gpt4 book ai didi

bash - 结合 wget 和 zenity/yad

转载 作者:行者123 更新时间:2023-12-05 04:17:40 25 4
gpt4 key购买 nike

我正在尝试使用 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

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

引自The Set Builtin :

pipefail

If set, the return value of a pipeline is the value of the last (rightmost) command to exit with a non-zero status, or zero if all commands in the pipeline exit successfully. This option is disabled by default.


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

echo "${PIPESTATUS[@]}"

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

1 0 0

如果 wget 失败。

引自manual :

PIPESTATUS

An array variable (see Arrays) containing a list of exit status values from the processes in the most-recently-executed foreground pipeline (which may contain only a single command).

关于bash - 结合 wget 和 zenity/yad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21182937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com