Открыть URL из скрипта Bash

У меня есть текстовый файл

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

Я пытаюсь открыть их с помощью Lynx. Вот тезис.

Я буду хранить все эти ссылки в текстовом файле, скажем, links.txt, а затем мне нужно открыть их с помощью Lynx, а затем прекратить Lynx с помощью kill.

Вот код, который я написал, но это не правильно

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

Что здесь не так?

2 ответа

Решение

После нескольких итераций...

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

В вашем скрипте вызов lynx блокирует терминал, и он никогда не будет вызывать sleep 10 и pkill, потому что lynx завершает работу только тогда, когда вы нажимаете "Q".

Так что я бы предпочел что-то другое. Почему бы вам не использовать wget. Что-то вроде этого:

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

Выход Wget после загрузки ссылки. Lynx больше похож на браузер с интерактивной консолью (он блокирует терминал), он не предназначен для скриптов.

Другие вопросы по тегам