Открыть 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 больше похож на браузер с интерактивной консолью (он блокирует терминал), он не предназначен для скриптов.