web-dev-qa-db-ja.com

BashスクリプトからURLを開く

テキストファイルがあります

Google.com
Youtube.com
Gmail.com
Yahoo.com

Lynxでそれらを開こうとしています。こちらが論文です。

これらのリンクはすべて、links.txtなどのtxtファイルに保存し、Lynxでそれらを開き、killを使用してLynxを終了する必要があります。

ここで私が書いたコードですが、正しくありません

for i in links.txt
do
lynx $i
sleep 10
pkill lynx
done

どうしたの?

3
rɑːdʒɑ

数回繰り返した後...

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
5
Oli

スクリプトでは、lynx呼び出しは端末をロックし、「Q」を押したときにlynxが終了するため、sleep 10およびpkillを呼び出すことはありません。

だから私は別の何かを好む。なぜwgetを使用しないのですか。このようなもの:

for url in $(cat links.txt); do
  wget -qO- $URL
  sleep 1
done

リンクをダウンロードした後、wgetは終了します。 Lynxは対話型のコンソールブラウザに似ており(端末をロックします)、スクリプト用には作成されていません。

1
chaos