У меня есть текстовый файл
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
Что здесь не так?
После нескольких итераций ...
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
, поэтому я счастлив. [ 119]
Чтобы напечатать статус в конце, я могу посмотреть, как проверить 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 больше похож на браузер с интерактивной консолью (он блокирует терминал), он не предназначен для скриптов.