使用“until”循环使 cURL 恢复中断的下载

问题描述 投票:0回答:1

这里有一个如何让 cURL 自动恢复中断下载的解决方案,来自 Juan Nunez-Iglesias 2013 年的博客文章:

export ec=18; while [ $ec -eq 18 ]; do curl -O -C - http://site.xyz/file.zip; export ec=$?; done

它已经在这里发布了好几次,无论是原始版本还是在

while
循环中都有细微的变化。

while
循环内的更改由不同的人引入,以使脚本更加健壮。

  • “当下载中断时,curl 的退出代码是 18,并且
    $?
    为您提供 bash 中最后一个命令的退出代码。因此,当退出代码为 18 时,继续尝试下载文件,并保持文件名(
    -O
    ) 并从上次下载停止的地方继续 (
    -C
    )。” - 胡安·努涅斯-伊格莱西亚斯
  • “正如 Jan 在评论中指出的那样,根据下载出现的问题,您的错误代码可能会有所不同。只需将 18 更改为您看到的任何错误即可让它为您工作!(如果您感觉如果你喜欢冒险,你可以将条件更改为
    while [ $ec -ne 0 ]
    ,但这感觉就像在 Python 中使用裸露的 except,这很糟糕 ;)” - Juan Nunez-Iglesias
  • “在我的例子中,curl 使用不同的代码退出,因此我改为检查成功代码:
    while [ $ec -ni 0 ]
    ”- Ilya Belsky

3 月份,Helder Magalhães 建议将原始 Juan 版本中的

while
循环替换为
until

这个解决方案可以使用

until
进一步简化。请参阅相关主题

虽然我不太擅长使用 cURL 或 shell 脚本,但我会尝试自己编写它,但自己编写它的问题不是脚本本身,而是缺乏了解如何正确测试它。

有人可以展示如何实现赫尔德的想法吗?它真的能让脚本更加健壮吗?

我使用Zsh。

bash curl zsh
1个回答
0
投票

我认为您想搜索模拟网络流量/抖动/丢包的工具。快速网络搜索有相当多的点击率。

© www.soinside.com 2019 - 2024. All rights reserved.