wget エラーでシェル スクリプトが壊れます - それを防ぐにはどうすればよいですか?
-
22-08-2019 - |
質問
ダウンロードするさまざまな種類のファイルへのリンクがたくさんある巨大なファイルがあります。各行は次のような 1 つのダウンロード コマンドです。
wget 'URL1'
wget 'URL2'
...
そしてそれらは何千もあります。
残念ながら、一部の URL は非常に見苦しくなります。たとえば、次のとおりです。http://www.cepa.org.gh/archives/research-working-papers/WTO4%20(1)-charles.docブラウザでは正常に開きますが、wget が混乱します。
エラーが発生します:
./tasks001.sh:35行目:予期しないトークン「1」付近で構文エラーが発生しました
./tasks001.sh:35行目:「wget」http://www.cepa.org.gh/archives/research-working-papers/WTO4%20(1)-charles.doc''
ダウンロードするものを指定する URL と「URL」の両方の方法を試しました。
このようなスクリプトを無人で実行する方法はありますか?ダウンロードできなかったファイルをスキップするだけであれば問題ありません。
解決
URL は一重引用符 (') ではなく二重引用符 (") で囲む必要があると思います。
それでもうまくいかない場合は、括弧文字をエスケープしてみてください (
そして )
バックスラッシュを付けると: \(
そして \)
どのシェルを使用していますか?バッシュ?ズシュ?
他のヒント
シェルを使用しないでください。
URL を何らかのファイル (my_urls.lst としましょう) に保存し、次の操作を実行します。
wget -i my_urls.lst
Wget は引用などを独自に処理します
これはあなたの質問に正確に答えているわけではありませんが、次のとおりです。
次のコマンドはどちらも bash シェルで直接動作します。
wget "http://www.cepa.org.gh/archives/research-working-papers/WTO4%20(1)-charles.doc"
そして
wget 'http://www.cepa.org.gh/archives/research-working-papers/WTO4%20(1)-charles.doc'
それらのいずれかがうまくいくかどうかを確認してもらえますか?
起こっているように見えるのは、シェルが ( 文字を使用して何かを行っていることです。URL の前後に一重引用符 ' の代わりに二重引用符 ' を使用してみます。
エラーを抑制したい場合は、UNIX では >/dev/null を使用して標準出力をリダイレクトするか、2> /dev/null を使用して標準エラーをリダイレクトします。他のオペレーティング システムでは、別の動作になる可能性があります。