web-dev-qa-db-fra.com

Ouvrir l'URL du script Bash

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?

3
rɑːdʒɑ

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

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.

1
chaos