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


27

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

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

--no-verboseバージョンでは、ダウンロードしたファイルごとに1行が出力されますが、これは望ましくありません。

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

エラーを出力するモードはありますか?

回答:


17

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

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

これは、16.04 ubuntu bashで機能する唯一の答えでした。
リゲマー

17

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 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

1
残念ながら、これは典型的なHTTPエラーを処理しません(たとえば、404エラーはこのように抑制されます)が、hacky wgetメソッドは処理します。
process91

Downvote:あなたの提案はもっともらしいですが、質問には答えません。
ステファンリヒター

サーバは、エラーコードを返した場合(例えば、404)エラーメッセージを表示することができない- -f /追加
Hontváriレベンテ

質問がcurlに関するものであるか、curlにwgetと同等の機能がある場合、これは素晴らしい答えになるでしょう。残念ながら、どちらもそうではありません
。– dfc

4

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

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コマンドに変えることができます...


3
より簡単な方法:wget -o logfile <url> || 猫のログファイル
kolypto

エラーメッセージを表示するだけでなく、エラーが発生した場合は終了するか、別の操作を行う可能性が高いため、より単純な方法はさらに悪くなります。
サムワトキンス

2

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

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

wget [wget options] > /dev/null

編集:だから、wget誤動作します。すべてのエラーに「エラー」という単語が含まれている場合は、パイプすることができますgrep

wget [wget options] 2>&1 | grep -i "error"

wgetはすべてをstderrに送信するようです。
pupeno

grep出力エラーのみに使用する別のオプションを追加しました
ベンS

stderr助けなしにパイプを通過しません。
追って通知があるまで一時停止します。

1
最後に、wget [wget options] 2>&1 | grep -i "失敗\ |エラー"
pupeno

1

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

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

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


1
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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.