컬 응답 본문 끝에 줄 바꿈을 자동으로 추가


234

curl 요청에 대한 HTTP 응답 본문에 후행 줄 바꿈이 포함되어 있지 않으면 쉘 프롬프트가 줄 중간에 있고 마지막 컬을 넣을 때 탈출이 엉망이되는 성가신 조건으로 끝납니다. curl 명령에서 문자를 삭제하면 잘못된 문자가 삭제됩니다.

예를 들면 다음과 같습니다.

[root@localhost ~]# curl jsonip.com
{"ip":"10.10.10.10","about":"/about"}[root@localhost ~]#

컬 응답 끝에 줄 바꿈을 자동으로 추가하여 화면 왼쪽 가장자리에 프롬프트를 다시 표시하는 데 사용할 수있는 트릭이 있습니까?


cygwin 설치에 어떤 컬 버전이 있더라도 이러한 답변 중 어느 것도 나를 위해 작동하지 않습니다. echo 문에 전체 curl 명령 만 래핑하면 예를 들어 다음 echo "$(curl localhost:8001/api)"과 같은 답변을 얻을 수 있습니다. unix.stackexchange.com/a/217611/110338
Alex Hall

답변:


418

man 파일에서 :

스크립트 프로그래머가 curl의 진행 상황을 더 잘 알 수 있도록 -w /-write-out 옵션이 도입되었습니다. 이를 사용하여 이전 전송에서 추출 할 정보를 지정할 수 있습니다.

일부 텍스트 및 끝 줄 바꿈과 함께 다운로드 된 바이트 양을 표시하려면

curl -w 'We downloaded %{size_download} bytes\n' www.download.com

따라서 ~/.curlrc파일에 다음을 추가 하십시오.

-w "\n"

46
이를 위해 다음 명령을 실행할 수 있습니다.echo '-w "\n"' >> ~/.curlrc
tbraun

5
나는 항상 -w "\n"모든 curl 명령 에 수동으로 추가 하고 TIL ~/.curlrc이 존재합니다!
Zhuoyun Wei

2
이것은 Windows의 git-bash에서 작동하지 않을 수 있습니다. 나는 -w "\nKLJLJKLJ LJKLLKJ"내에게 추가 ~/.curlrc하고 컬을 달았고 새로운 줄이나 이상한 캐릭터를 얻지 못했습니다.
jcollum

@jcollum 일부 Windows 포트는 선호 _합니다 .. 컬이 찾고 있을 가능성이 높으며 ~/_curlrc결과적으로 효과 echo '-w "\n"' >> ~/_curlrc가 있습니다. 그것은 나를 위해합니다. BTW : 컬은 이스케이프 공백 이상 불평 할 것이다
user1129682

명령 줄을 사용 -w "\n"하거나을 ; echo수정하여 추가 하면 가치가 있습니다 .curlrc. curlrc를 수정하면 응답 데이터 끝에서 줄 바꿈을 처리하지 않으면 일부 스크립트가 중단 될 수 있습니다. 나는 개인적으로 rc를 수정하는 명령 줄에 추가 사항을 고수 할 것입니다.
제이슨

99

시도해보십시오 :

curl jsonip.com; echo 

산출

{"ip":"x.x.x.x","about":"/about"}

이는 것을 간단한;)

(curl 명령에 국한되지 않고 개행으로 끝나지 않는 모든 명령)


3
이것을 스크립트 또는 bash 별명 또는 이와 유사한 것으로 감싸는 방법이 있습니까? 모든 줄의 끝에 "; echo"를 입력하면 지루해질 수 있으며 어떻게 든 자동화 할 수 있다고 생각합니다.
Matthew G

따라서 검색 노력을 제공하는 것이 좋습니다. 이것을 별칭이나 스크립트에 넣는 방법을 찾는 것은 분명합니다.
Gilles Quenot

2
echo 명령을 추가하면 curl 명령에서 종료 코드가 지워집니다. 가장 많이 사용되는 답변에서 제안 된 curl에 대한 -w "\ n"옵션은 curl 종료 코드를 검사 할 수 있도록 유지합니다.
bradoaks

14

컬 후 깔끔한 새로운 라인뿐만 아니라 더 많은 정보

~/.curlrc

-w "\nstatus=%{http_code} %{redirect_url} size=%{size_download} time=%{time_total} content-type=\"%{content_type}\"\n"

(더 많은 옵션이 여기에 있습니다 )

redirect_url 요청이 리디렉션되지 않거나 사용하는 경우 비어 있습니다. -L 을 따르기 위해 하는 .

출력 예 :

~ ➤  curl https://www.google.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="https://www.google.co.uk/?gfe_rd=cr&amp;ei=FW">here</A>.
</BODY></HTML>

status=302 https://www.google.co.uk/?gfe_rd=cr&ei=FW size=262 time=0.044209 content-type="text/html; charset=UTF-8"
~ ➤  

Edit , 일을 더 읽기 쉽게하기 위해 ANSI 색상을 -w줄에 추가 할 수는 있지만 직접 작성하는 것은 쉽지 않지만 스크립트는 ~/.curlrc색상이 있는 파일을 생성 할 수 있습니다 .

#!/usr/bin/env python3
from pathlib import Path
import click
chunks = [
    ('status=', 'blue'),
    ('%{http_code} ', 'green'),
    ('%{redirect_url} ', 'green'),
    ('size=', 'blue'),
    ('%{size_download} ', 'green'),
    ('time=', 'blue'),
    ('%{time_total} ', 'green'),
    ('content-type=', 'blue'),
    ('\\"%{content_type}\\"', 'green'),
]
content = '-w "\\n'
for chunk, colour in chunks:
    content += click.style(chunk, fg=colour)
content += '\\n"\n'

path = (Path.home() / '.curlrc').resolve()
print('writing:\n{}to: {}'.format(content, path))
path.write_text(content)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.