출력을 컬 응답 끝에 추가하지 않도록 stdout에 대한 다른 파일 설명자로 출력을 리디렉션하려면 컬 -w 옵션을 어떻게 사용할 수 있습니까?

출력을 컬 응답 끝에 추가하지 않도록 stdout에 대한 다른 파일 설명자로 출력을 리디렉션하려면 컬 -w 옵션을 어떻게 사용할 수 있습니까?

컬 작업을 사용하여 다운로드 속도와 총 시간을 원합니다 curl -w. 내가 달리면

curl example.com -w '%{speed_download} %{time_total}'

표준 출력은

<!doctype html> <html> <head> <title>Example Domain</title> <meta charset="utf-8" /> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <style type="text/css"> body { background-color: #f0f0f2; margin: 0; padding: 0; font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; } div { width: 600px; margin: 5em auto; padding: 2em; background-color: #fdfdff; border-radius: 0.5em; box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02); } a:link, a:visited { color: #38488f; text-decoration: none; } @media (max-width: 700px) { div { margin: 0 auto; width: auto; } } </style> </head> <body> <div> <h1>Example Domain</h1> <p>This domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission.</p> <p><a href="https://www.iana.org/domains/example">More information...</a></p> </div> </body> </html> 2861.000 0.439478

speed_download 및 time_total이 표준 출력에 추가됩니다. 따라서 해당 옵션을 사용하지 않으면 -w다음과 같이 컬 응답을 추출할 수 있습니다.

CURL_RESPONSE=$(curl example.com -w '%{speed_download} %{time_total}')
echo $CURL_RESPONSE | grep -oP ".*(?= ([0-9]+\.[0-9]+ [0-9]+\.[0-9]+$))"

그리고 마찬가지로 speed_download얻고time_total

echo $CURL_RESPONSE | grep -oP "([0-9]+\.[0-9]+ [0-9]+\.[0-9]+$)"

-w '%{speed_download} %{time_total}'나는 이 접근 방식을 피하고 출력을 STDERR과 같은 다른 파일 설명자로 리디렉션하고 이를 사용하지 않고 STDOUT을 유지하고 싶습니다 . 이 문서에서https://www.mit.edu/afs.new/sipb/user/ssen/src/curl-7.11.1/docs/curl.html그것은 말한다:

-w/--쓰다

작업이 완료되고 성공한 후 표시되는 내용을 정의합니다. 형식은 임의 개수의 변수와 혼합된 일반 텍스트를 포함할 수 있는 문자열입니다. 문자열은 "string"으로 지정할 수 있고, 특정 파일에서 읽으려면 "@filename"으로 지정할 수 있으며, 표준 입력에서 형식을 읽도록 컬에게 지시하려면 "@-"를 쓸 수 있습니다.

파일에서 문자열을 쓰는 형식을 읽을 수 있지만 -w를 사용하지 않고 컬의 일반 STDOUT이 리디렉션되는 위치와 별도로 표시되는 내용을 제어할 수 있는 방법이 있습니까?

답변1

지침( man curl)에 따르면:

-w, --쓰다

모든 변수는 %{variable_name}으로 지정되며, 일반 %를 출력하려면 %%로 적어주시면 됩니다. \n을 사용하여 개행 문자를 출력하고, \r을 사용하여 캐리지 리턴을 출력하고, \t를 사용하여 탭 공백을 출력할 수 있습니다. 출력은 표준 출력에 기록되지만 %{stderr}를 사용하여 표준 오류로 전환할 수 있습니다.

따라서 다음 명령을 사용하여 and 를 curl얻을 수 있습니다 .speed_downloadtime_total

curl example.com --silent -w '%{stderr} %{speed_download} %{time_total}' 1> /dev/null

다른 출력(html)을 얻으려면 파일 설명 1자나 stdout파일을 리디렉션할 수 있습니다.

curl example.com --silent -w '%{stderr} %{speed_download} %{time_total}' 1> somefile

관련 정보