我正在尝试运行托管在 github 上的远程 bash 脚本:
wget -O - https://raw.githubusercontent.com/xxxxx/script.sh
一切运行良好,没有问题
但是当我更新上面的脚本并运行相同的命令时,它会处理旧脚本
我尝试过--no-cache
,,--delete-after
但没有成功
如何每次获取 wget 的最新副本?
答案1
raw.githubusercontent.com
正在使用 CDN,您可以通过以下方式检查:
$ dig raw.githubusercontent.com +short
github.map.fastly.net.
1.2.3.4
因此,如果该 CDN 强制执行基于 TTL 的缓存(通过检查 300 秒的标头,似乎确实如此Cache-Control
),那么您就只能继续使用它。正如您所看到的,使用 进行询问--no-cache
不会产生任何效果,因为这就是设计用来防止滥用的方式。
你可以在许多情况下绕过它黑客方法,我不会列出,但你基本上是在试图规避 github 制定的政策,我建议不要这样做。此外,今天有效的方法可能在明天或后续调用中以编程方式不起作用。
所以..只需等待 TTL 过期并获取新副本。
您可以编写一个脚本,每隔 x 秒轮询一次(但不要太快),然后等待,直到您看到X-Cache: MISS
- 它会告诉您获得了新副本。或者检查ETag
是否有更改。
或者你可以检查 github 是否为你提供了一个 API 来使你自己的代码无效,或者提供了一种调用最新提交的文件的方法,例如:https://raw.githubusercontent.com/xxxxx/script.sh?commit=12345