gpt4 book ai didi

bash - 如何避免在 bash 中挂起 wget

转载 作者:行者123 更新时间:2023-11-29 09:02:47 25 4
gpt4 key购买 nike

我有 .sh 脚本,除其他外,wgets 来自谷歌的货币汇率如下:

printf 'Bash: Going to get exchange rates'
echo
wget -qO- "http://www.google.com/finance/converter?a=1&from=usd&to=aud" | sed '/res/!d;s/<[^>]*>//g' > exrates
wget -qO- "http://www.google.com/finance/converter?a=1&from=usd&to=jpy" | sed '/res/!d;s/<[^>]*>//g' >> exrates
wget -qO- "http://www.google.com/finance/converter?a=1&from=usd&to=hkd" | sed '/res/!d;s/<[^>]*>//g' >> exrates
wget -qO- "http://www.google.com/finance/converter?a=1&from=usd&to=nzd" | sed '/res/!d;s/<[^>]*>//g' >> exrates
wget -qO- "http://www.google.com/finance/converter?a=1&from=usd&to=eur" | sed '/res/!d;s/<[^>]*>//g' >> exrates
wget -qO- "http://www.google.com/finance/converter?a=1&from=usd&to=gbp" | sed '/res/!d;s/<[^>]*>//g' >> exrates

mv /home/stan/perl/2014/scripts/exrates /home/stan/perl/2014/exrates/exrates

printf 'Bash: Got exchange rates'
echo

然而,有时脚本会卡在这里。我不介意每次运行时不更新这些速率,如果它挂起,我想完全跳过这一步,但是怎么做呢?

我应该在“if”语句中输入什么来检查 wget 是否可以迅速获取数据或将永远花费?在 wget 执行中多一点冗长也没有坏处。

顺便说一句,我不知道为什么 wget 会挂起。浏览器可以正常打开这些页面,同样的命令也可以从终端逐行运行。

最佳答案

我假设它挂起是因为您有许多 HTTP 请求被发送到脚本中的单个主机。有问题的主机不太喜欢这样,它开始阻止来自您的 IP 地址的请求。

一个简单的解决方法是在请求之间放置一个 sleep 。您还可以使用一个函数:

getExchangeRates() {
wget -qO- "http://www.google.com/finance/converter?a=1&from=usd&to=$1" | sed '/res/!d;s/<[^>]*>//g' >> exrates
sleep 10 # Adding a 10 second sleep
}

并通过将参数传递给函数来调用它:

getExchangeRates aud

该函数也可以在各种货币的循环中调用:

for currency in aud jpy hkd nzd eur gpb; do
getExchangeRates $currency
done

关于bash - 如何避免在 bash 中挂起 wget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23213087/

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