ファイルをcurl
し、それをファイルまたは別のコマンドにパイプすると、ターミナルに出力が表示されます。パイプはcurlからのすべての出力を取得することになっているため、これがどのように起こるのかわかりません。
例えば:
$ curl http://www.archive.org/stream/Pi_to_100000000_places/pi.txt > /dev/null
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 129M 0 129M 0 0 22.5M 0 --:--:-- 0:00:05 --:--:-- 24.7M
次のようにcurlを使用します。
curl http://www.archive.org/stream/Pi_to_100000000_places/pi.txt | some_other_command > some_file
ステータスをsome_other_commandにパイプ処理したくありません。ステータスを表示する方法を知りたいだけです。ただし、回答に追加された両方のストリームをリダイレクトする方法を示すため、削除しないでください。
一般に利用可能な2つの出力ストリームがあります。標準出力と標準エラーです。実際には、端末で実行する場合、両方が端末にデータを送信します。 >
は標準出力のみをリダイレクトし、curlは進捗データを標準エラーに出力します。両方を抑制するには、次のいずれかを使用します。
curl ... > /dev/null 2>&1
curl ... &> /dev/null # bash's combined redirection operator
curl -s ... # -s, --silent: Silent or quiet mode. Don't show progress meter or error messages.
両方をパイプに送信するには:
curl ... 2>&1 | ...
curl |& ... # bash's combined pipe
|&
または&>
演算子を使用しない限り、すべてのストリームは個別にリダイレクトされます。
参照:
curl
を使用してURLを開くと、2つの出力が得られます。
curl
自体のステータス。Curlでは、これら2つを別々に表示する方法を使用する必要があります。そうしないと、実際の出力(URLのコンテンツ)の処理が難しくなり、不必要なコンテンツ(カールのステータス)になります。
そのため、ステータスにはstderr
を使用し、コンテンツにはstdout
を使用します。
>
を使用すると、URLのコンテンツ(stdout)を/dev/null
にリダイレクトするため、実際には2> /dev/null
を使用する必要があります。
また、両方を次のコマンドに渡す場合:
curl url |& command
ステータスを表示せずにコンテンツを次のコマンドにパイプするだけの場合:
curl 2> /dev/null | command