我有一个文本文件
Google.com
Youtube.com
Gmail.com
Yahoo.com
我正在尝试使用 Lynx 打开它们。以下是论文。
我会将所有这些链接存储在一个 txt 文件中,比如 links.txt,然后我需要用 Lynx 打开它们,然后使用 kill 终止 Lynx。
这是我写的代码但它不正确
for i in links.txt
do
lynx $i
sleep 10
pkill lynx
done
这里有什么问题?
答案1
经过几次迭代...
for url in $(cat links.txt); do
timeout 10 lynx "$url"
done
Lynx 处于阻塞状态(并且必须阻塞才能工作),因此睡眠无法正常工作,它还会尝试获取 stdin,这让管道传输变得“非常”困难。请参阅此处以了解文件中的迭代行。
Lynx 允许 cookie 的提示可能会有点烦人。如果出现问题,您可以更改其设置,也可以传递标志-accept_all_cookies
,如下所示:
for url in $(cat links.txt); do
timeout 10 lynx -accept_all_cookies "$url"
done
今天我学习了这个timeout
命令,所以我很高兴。
要在最后打印状态,我能看到的唯一方法是单独检查 URL 是否正常,如下所示:
for url in $(cat links.txt); do
timeout 10 lynx -accept_all_cookies "$url"
if [[ $(curl -o /dev/null --silent --head --write-out '%{http_code}\n' "$url") -eq "200" ]]; then
echo "Getting $url successful"
else
echo "Getting $url unsuccessful"
fi
done
答案2
在您的脚本中,lynx 调用锁定终端,它永远不会调用 sleep 10 和 pkill,因为当您按下“Q”时 lynx 就会退出。
所以我更喜欢其他东西。为什么不使用 wget?像这样:
for url in $(cat links.txt); do
wget -qO- $URL
sleep 1
done
下载链接后,wget 退出。Lynx 更像是一个交互式控制台浏览器(它会锁定终端),它不是为脚本而设计的。