J'ai essayé cela de plusieurs façons, mais essayer de faire passer une variable dans ce code lorsqu'il s'agit d'un fichier texte ne fonctionne tout simplement pas. Ce qui est bizarre, c'est que si le chèque voit juste une URL, cela fonctionne parfaitement.Impossible de passer la variable dans la boucle while
J'ai essayé -i dans wget, entre guillemets $ line, {} autour de la ligne, en mettant $ directory dans wget. Rien. Il le lit comme vide ou comme nom de fichier, pas les URL dans le fichier.
En plus de ce désordre, $ savefile.log dans la première partie de la boucle retourne toujours directory.txt.log. J'ai essayé $ line.log pour corriger cela et nada. J'ai besoin de lui dénudé comme: et \ ne sont pas valides dans un nom de fichier.
#!/bin/bash
read -p "Enter directory or .txt file: `echo $'\n> '`" directory
savefile=$(echo "${directory//"http://"}" | cut -d '/' -f1)
if [[ $directory == *.txt ]]
echo
echo "Spidering $directory"
while IFS='' read -r line || [[ -n "$line" ]]; do
echo "$line"
wget -np --spider -e robots=off --no-check-certificate $line 2>> $savefile.log
echo
echo "Spider saved to $savefile.log"
done < $directory
else
echo
echo "Spidering $directory"
wget -r -np --spider -e robots=off --no-check-certificate $directory 2>> $savefile.log
echo
echo "Spider saved to $savefile.log"
fi
Veuillez jeter un coup d'œil: http://www.shellcheck.net/ – Cyrus
La substitution de commande n'est pas nécessaire; '$ '...'' n'est pas limité aux séquences d'échappement. 'read -p $ 'Entrez le répertoire ou le fichier .txt: \ n>' directory'. – chepner
Assurez-vous que vos fichiers de données sont des fichiers texte appropriés (avec une nouvelle ligne de fin), et vous n'aurez pas besoin de '|| [[-n "$ line"]] 'pirater pour que le script fonctionne. – chepner