J'ai un fichier texte
Google.com
Youtube.com
Gmail.com
Yahoo.com
J'essaye de les ouvrir avec Lynx. Voici la thèse.
Je vais stocker tous ces liens dans un fichier txt, par exemple, links.txt. Je dois ensuite les ouvrir avec Lynx, puis mettre fin à Lynx en utilisant kill.
Voici le code que j'ai écrit mais ce n'est pas correct
for i in links.txt
do
lynx $i
sleep 10
pkill lynx
done
Qu'est-ce qui ne va pas ici?
Après plusieurs itérations ...
for url in $(cat links.txt); do
timeout 10 lynx "$url"
done
Lynx bloque (et doit fonctionner), donc dormir ne fonctionne pas correctement et il essaie également de capturer stdin, ce qui rend les choses très intéressantes de faire piping. Voir ici pour itérer des lignes dans un fichier .
Lynx peut être un peu ennuyant avec ses invites pour autoriser les cookies. Vous pouvez soit modifier ses paramètres s'il y a un problème, soit passer l'indicateur -accept_all_cookies
, comme suit:
for url in $(cat links.txt); do
timeout 10 lynx -accept_all_cookies "$url"
done
Aujourd'hui, j'ai appris l'existence de la commande timeout
. Je suis donc heureux.
Pour imprimer un statut à la fin, la seule façon de vérifier si l’URL est vérifiée est acceptable séparément, comme suit:
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
Dans votre script, l’appel lynx verrouille le terminal et il n’appellera jamais sleep 10 et pkill car lynx se ferme au moment où vous appuyez sur "Q".
Je préférerais donc quelque chose de différent. Pourquoi n'utilisez-vous pas wget? Quelque chose comme ça:
for url in $(cat links.txt); do
wget -qO- $URL
sleep 1
done
wget se ferme après le téléchargement du lien. Lynx est plus comme un navigateur de console interactive (il verrouille le terminal), ce n’est pas fait pour les scripts.