답변:
-s
(silent) 옵션을 추가하여 진행률 표시기를 제거한 다음 stderr을 stdout으로 리디렉션하여 응답 본문과 동일한 fd에서 자세한 출력을 얻습니다.
curl -vs google.com 2>&1 | less
2>&1
.
URL에 앰퍼샌드가있을 수 있습니다. 나도이 문제가 있었고 내 URL이 앰퍼샌드 (CGI 변수가 전달됨)로 가득 차서 모든 것이 이상한 방식으로 백그라운드로 전송되어 제대로 리디렉션되지 않는다는 것을 깨달았습니다. URL을 따옴표로 묶으면 문제가 해결됩니다.
나는 똑같은 것을 발견했다. 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
하면 오류가 나를 위해 표준 출력으로 올바르게 리디렉션됩니다.