私はこれをいくつかの方法で試しましたが、テキストファイルのときにこのコードに変数を渡そうとしても機能しません。奇妙なのは、それがちょうどURLだとチェックが見れば、それは完璧に動作します。whileループに変数を渡すことができません
私は、wgetの中で-iを試しました。$ lineの周りに{}を引用し、$ directoryをwgetにいくつか入れます。何もない。それは、ファイルのURLではなく、空白またはファイル名として読み取られます。
この混乱のなかで、ループの最初の部分の$ savefile.logは常にdirectory.txt.logを返します。それを修正するために$ line.logを試しました。私はそれを削除する必要があります:と\はファイル名では有効ではありません。
#!/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
ご覧ください:http://www.shellcheck.net/ – Cyrus
コマンドの置換は必要ありません。 '$ '...' 'はエスケープシーケンスに限定されません。 'read -p $ 'ディレクトリまたは.txtファイルを入力してください:\ n>' directory'。 – chepner
データファイルが適切なテキストファイルであることを確認してください(改行を終える)。 [[-n "$ line"]] 'スクリプトを動作させるためにハックします。 – chepner