stderr
bash 셸에서 cURL 요청의 자세한 섹션 만 인쇄하려고합니다 .
그러나 내가 이렇게 리디렉션 stdout
하면 :
curl -v http://somehost/somepage > /dev/null
출력 중간에 다음과 같은 결과 테이블이 나타납니다 stderr
.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
끝 부분에 이것에 의해 다음과 같이 :
{ [data not shown]
118 592 0 592 0 0 15714 0 --:--:-- --:--:-- --:--:-- 25739
응답 헤더를 읽기 어렵게 만듭니다.
리디렉션하지 않으면이 텍스트가 표시되지 않습니다.
효과를 보는 또 다른 방법 :
표가 나타나지 않습니다 :
curl -v http://somehost/somepage 2>&1
표가 나타납니다.
curl -v http://somehost/somepage 2>&1 | cat
1) 특정 유형의 리디렉션에서만 어떻게 표시됩니까?
2) 그것을 억제하는 가장 쉬운 방법은 무엇입니까?
감사합니다
답변
이 시도:
curl -vs -o /dev/null http://somehost/somepage 2>&1
즉, 진행을 억제 m 보낼 stdout
로 /dev/null
리다이렉트 stderr
( -v
에 출력) stdout
.
답변
curl --fail --silent --show-error http://www.example.com/ > /dev/null
상태 대화 상자가 표시되지 않지만 STDERR에 오류가 출력됩니다.
user@host:~# curl http://www.yahoo.com > /dev/null
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 254k 0 254k 0 0 403k 0 --:--:-- --:--:-- --:--:-- 424k
위는 리디렉션 할 때 상태 테이블을 출력합니다.
user@host:~# curl --fail --silent --show-error http://www.yahoo.com > /dev/null
위의 경우 리디렉션 할 때 상태 테이블이 표시되지 않지만 오류는 여전히 STDERR로 이동합니다.
user@host:~# curl --fail --silent --show-error http://www.errorexample.com > /dev/null
curl: (6) Couldn't resolve host 'www.errorexample.com'
위는 STDERR 오류의 예입니다.
user@host:~# curl -v --fail --silent --show-error http://www.errorexample.com > ~/output.txt 2>&1
user@host:~# cat ~/output.txt
* getaddrinfo(3) failed for www.errorexample.com:80
* Couldn't resolve host 'www.errorexample.com'
* Closing connection #0
curl: (6) Couldn't resolve host 'www.errorexample.com'
STDERR을 STDOUT (이 경우 파일)으로 리디렉션하려면 끝에 2> & 1을 추가하십시오.
답변
에 따르면 man curl
:
-s, --silent : Silent or quiet mode. Don't show progress meter or error messages. Makes Curl mute.
사용법 예 :
curl -s 'http://www.google.com'
또는 bash의 변수에 HTTP-BODY를 캡처하려는 경우
BODY=$( curl -s 'http://www.google.com' )
echo $BODY
사용 -s
하거나 --silent
상호 교환 할 수 있습니다 .
답변
질문 1 ( 출력이 리디렉션 될 때만 cURL이 테이블을 표시하는 방법을 알고 있음)을 참조 하면 프로그램이 출력이 지시되고 있음을 알 수는 없지만 POSIX 시스템에는 isatty
여부를보고 하는 기능이있는 것 같습니다 파일 디스크립터는 터미널을 나타냅니다.
답변
1) 특정 유형의 리디렉션에서만 어떻게 표시됩니까?
컬 맨 페이지에서
HTTP POST 또는 PUT 요청에 대한 진행률 미터를 원하는 경우 쉘 경로 재 지정 (>), -o [file] 또는 유사 항목을 사용하여 응답 출력을 파일로 경로 재지 정해야합니다.
curl은 isatty 를 사용하여 경로 재 지정을 판별하고 파일 또는 쉘 파이프로 경로 재 지정 될 때 진행 미터를 인쇄 해야합니다 .
2) 그것을 억제하는 가장 쉬운 방법은 무엇입니까?
컬 맨 페이지에서
-s,-자동
자동 또는 자동 모드. 진행률 표시기 또는 오류 메시지를 표시하지 마십시오. 컬을 음소거합니다. 요청한 데이터는 리디렉션하지 않으면 터미널 / stdout으로 출력됩니다.
답변
실제 오류 메시지를 저장하려면 strerr를 로그 파일에 작성해야합니다. 그런 것 :
curl "http://domain.name/process" --stderr /var/log/curl_err.log > /dev/null
답변
프록시 뒤에 있기 때문에 나는 이런 명령을 사용합니다.
date -s “$ (curl –proxy http : // PROXY : 8080 -s http://google.com –head -s | grep Date | sed ‘s / Date : // g’)”