web-dev-qa-db-ja.com

wgetはエラーを出力しますが、それ以外は何もしません

どうすればwget印刷エラーが発生しますか?

デフォルトの動作では、進行状況バーと多くのものが表示されます。

--no-verboseバージョンでは、ダウンロードされたファイルごとに1行が印刷されますが、これは不要です。

--quietオプションを指定すると完全に静かになり、エラーが発生しても何も出力されません。

エラーを表示するモードはありますか?

28
pupeno

この質問には非常に良い答えがあります。必ず確認してください。しかし、私がやったことはこれです。

wget [wget options] 2>&1 | grep -i "failed\|error"
17
pupeno

すべてのエラーがどのように表示されるかを推測することなく、curlを使用します。

[wizard@laptop ~] curl -s -S http://www.google.coccm/ > /dev/null && echo "TRUE"
curl: (6) Couldn't resolve Host 'www.google.coccm'
[wizard@laptop ~]$ curl -s -S http://www.google.com/ > /dev/null && echo "TRUE"
TRUE

-s /-silent

Silent mode. Don’t show progress meter or error messages. Makes Curl mute.

-S /-show-error

When used with -s it makes curl show error message if it fails.

そして、何らかの理由でstdoutにstderrが必要な場合。

curl -s -S http://www.google.coccm/  2>&1 1> /dev/null
17
reconbot

そのためのオプションが表示されません。エラーが何であるかを知っている必要がありますか?エラーが発生したかどうかを知る必要があるだけの場合は、終了ステータスを使用できます。

if ! wget -o /dev/null www.google.com/flasfsdfsdf; then
    echo 'Oops!'
fi

または多分:

if ! wget -o logfile www.google.com/flasfsdfsdf; then
    cat logfile
fi

そして、あなたが気になりたいなら、あなたは猫をgrepコマンドに変えることができます...

4
Kyle Brandt

標準出力を/dev/nullにリダイレクトしますが、エラー出力は選択したシェルに保持します。

Bashではこれは次のようになります。

wget [wget options] > /dev/null

編集:したがって、wgetは正しく動作しません。すべてのエラーに「エラー」という単語が含まれている場合は、grepにパイプできます。

wget [wget options] 2>&1 | grep -i "error"
2
Ben S
OUT=`wget --no-verbose -O /tmp/a http://example.com/ 2>&1` || echo $OUT

動作します。ただし、出力ファイルは常に切り捨てられるため、必要な場合とそうでない場合があります。

カールが良いです:

curl --fail --silent --show-error -o /tmp/a http://example.com

エラーが発生した場合、出力ファイルは変更されません。

1

wgetはすべてのメッセージをstderrに出力するため、それをgrepにパイプする前にリダイレクトを使用する必要があります。

wget [options] 2>&1 | grep "^wget:"

これは、wgetがエラー行を「wget:」で開始することを前提としています。