[linux] curl -v의 출력을 어떻게 파이프하거나 리디렉션합니까?

어떤 이유로 2> 또는> 또는 |를 통해 리디렉션하는지 여부에 관계없이 출력은 항상 터미널에 인쇄됩니다. 이 문제를 해결할 방법이 있습니까? 왜 이런 일이 발생합니까?



답변

-s(silent) 옵션을 추가하여 진행률 표시기를 제거한 다음 stderr을 stdout으로 리디렉션하여 응답 본문과 동일한 fd에서 자세한 출력을 얻습니다.

curl -vs google.com 2>&1 | less


답변

URL에 앰퍼샌드가있을 수 있습니다. 나도이 문제가 있었고 내 URL이 앰퍼샌드 (CGI 변수가 전달됨)로 가득 차서 모든 것이 이상한 방식으로 백그라운드로 전송되어 제대로 리디렉션되지 않는다는 것을 깨달았습니다. URL을 따옴표로 묶으면 문제가 해결됩니다.


답변

위의 대답은 나를 위해 작동하지 않았으며 결국 다음 구문이되었습니다.

curl https://${URL} &> /dev/stdout | tee -a ${LOG}

tee는 화면에 출력을 표시하지만 내 로그에도 추가합니다.


답변

파일에 출력이 필요한 경우 리디렉션을 사용할 수 있습니다.

curl https://vi.stackexchange.com/ -vs >curl-output.txt 2>&1

플립하지 않도록주의하시기 바랍니다 >curl-output.txt2>&1,하는 것입니다 인해하지 작업 배쉬의 재 동작 .


답변

나는 똑같은 것을 발견했다. 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 문을 다음과 같은 스크립트에 넣으십시오. abc.sh

이제 실행 :

sh abc.sh 1>stdout_output 2>stderr_output

컬의 결과 stdout_output와 진행 정보를 stderr_output.