태그 보관물: stderr

stderr

cURL : 리디렉션 할 때 이상한 출력을 억제하는 방법은 무엇입니까? 0

stderrbash 셸에서 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’)”