0

プログラムの開始時に属性を wget に設定して、すべての wget インスタンスに使用しようとしています。

WGET_LOG_FILE=path/to/wget_log
USER_AGENT='Mozilla/5.0 (X11; Linux i686; rv:18.0) Gecko/20100101 Firefox/18.0x'

WGET="wget -U $USER_AGENT -a $WGET_LOG_FILE --no-clobber --wait=2 --random-wait"

$WGET www.webpage.com

問題は、ログを無視してすべてを出力するか、「path/to/wget_log が存在しません」というエラーが発生することです。したがって、ユーザー エージェント文字列も無視すると思います...

それで、私は何を間違っていますか?" を ' または $() に変更してみました ...

奇妙なことに、ターミナルで実行すると、次のようになります。

wget -U $USER_AGENT -a $WGET_LOG_FILE --no-clobber --wait=2 --random-wait www.webpage.com

動作するので、サブシェルで実行されていると推測しているため、取得できません。

質問は次のとおりです。

  1. bashスクリプトで属性をwgetに正しく設定するには? チェプナーが答える
  2. wgetが指定されたユーザーエージェントを使用しているかどうかを確認する方法は? http://whatsmyuseragent.com/などのユーザー エージェント チェック Web ページを wget するだけです。
  3. Web ページを取得するのに 2 秒の待機率は適切ですか?

ありがとう

4

1 に答える 1

4

一般に、実行するコマンドの名前とその引数にパラメーターを展開することに頼るべきではありません。単純なケースでは期待どおりに機能しますが、すぐに問題が発生する可能性があります。表示されているエラーを正確に説明することはできません (引用していないため$USER_AGENT、3 番目の例でさえ機能することに驚いています)。

を使用しているため、配列を使用して引数を保持し、明示的にbash呼び出して配列を展開して引数を提供する必要があります。wget

WGET_LOG_FILE=path/to/wget_log
USER_AGENT='Mozilla/5.0 (X11; Linux i686; rv:18.0) Gecko/20100101 Firefox/18.0x'

wget_args=( "-U" "$USER_AGENT"
            "-a" "$WGET_LOG_FILE"
            "--no-clobber"
            "--wait=2"
            "--random-wait")

wget "${wget_args[@]}" www.webpage.com
于 2013-02-07T20:19:57.637 に答える