回答:
-s
(サイレント)オプションを追加して、進行状況メーターを削除してから、stderrをstdoutにリダイレクトして、応答本文と同じfdで詳細な出力を取得します。
curl -vs google.com 2>&1 | less
2>&1
。
URLにはおそらくアンパサンドが含まれています。私もこの問題を抱えていて、私のURLにはアンパサンド(CGI変数が渡されるため)でいっぱいで、すべてが奇妙な方法でバックグラウンドに送信されていて、適切にリダイレクトされていないことがわかりました。URLを引用符で囲むと、修正されます。
ファイルの出力が必要な場合は、リダイレクトを使用できます。
curl https://vi.stackexchange.com/ -vs >curl-output.txt 2>&1
>curl-output.txt
とを反転させないように注意してください2>&1
。これは、bashのリダイレクト動作のために機能しません。
同じことが見つかりました。curl自体はSTDOUTに出力されますが、別のプログラムにパイプすることはできませんでした。
最初は、xargsを使用して出力を最初にエコーすることで解決したと思いました。
curl -s ... <url> | xargs -0 echo | ...
しかし、コメントで指摘されているように、xargs部分がなくても機能するので、-s
(サイレントモード)がSTDOUTへの無関係な進行状況の出力を防ぐための鍵となります。
curl -s ... <url> | perl -ne 'print $1 if /<sometag>([^<]+)/'
上記の例<sometag>
では、curlステートメントのXML出力から単純なコンテンツ(埋め込みタグを含まない)を取得しています。
ちょうど私の2セント。以前に答えたように、以下のコマンドでうまくいくはずです
curl -vs google.com 2>&1
ただし、出力をファイルに取得する必要がある場合は、
curl -vs google.com > out.txt 2>&1
うまくいくはずです。
この簡単な例は、curl出力をキャプチャし、bashスクリプトで使用する方法を示しています
function main
{
\curl -vs 'http://google.com' 2>&1
# note: add -o /tmp/ignore.png if you want to ignore binary output, by saving it to a file.
}
# capture output of curl to a variable
OUT=$(main)
# search output for something using grep.
echo
echo "$OUT" | grep 302
echo
echo "$OUT" | grep title
curl -v url 2>&1
と、エラーは標準出力に正しくリダイレクトされます。