从 Bash 脚本打开 URL

从 Bash 脚本打开 URL

我有一个文本文件

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 更像是一个交互式控制台浏览器(它会锁定终端),它不是为脚本而设计的。

相关内容