컬로 줄 바꿈을 보내는 방법은 무엇입니까?


94

curl로 줄 바꿈을 보내기 위해 다음을 시도했지만 curl로 \n해석되지는 않습니다.

curl -X PUT -d "my message\n" http://localhost:8000/hello

컬로 줄 바꿈을 보내려면 어떻게해야합니까?


1
어떤 플랫폼에서? 관련성이있을 수 있음
Pekka

답변:


115

경우에 따라 그대로 보낼 데이터를 제공하려고합니다.

그만큼 --data-binary옵션은 않습니다.


2
이것이 최선의 방법입니다. -d @message.txt특히 다른 답변에서 제안한 것처럼 사용하는 대안은 줄 바꿈을 변경할 수 있습니다. --data-binary반면에 그렇지 않습니다 (여러 부분 / 양식 데이터에 대한 CRLF 줄
바꿈

9
그것은 나에게 초를했다 때문에 : 파일을 업로드하는 경우 당신은 아마 이것에 대한 서브 쉘을 사용하는 것이 좋습니다curl -H "Content-Type:text/plain" --data-binary "$(<myfile)" http://localhost:8888
mikemaccana

흥미롭지 만 장점은 무엇입니까?
Szocske

8
+1, 정답입니다. curl --data-binary @/path/to/file.txt http://example.com/target
Frank Olschewski 2013 년

4
--data-binary를 작동시킬 수는 없지만 % 0A 문자 (@malcolmocean 참조) 답변을 사용할 수있었습니다. --data-binary "ip = 33.44.55. * \ n5.6.7.8"을 사용하면 개행으로 처리되지 않지만 --data ""ip = 33.44.55. * % 0A5.6.7.8 "을 통해 개행을 보냅니다
Paul

52

당신의 쉘은 컬이 아닌 개행 대신에 전달 \됩니다 . 배쉬는 지원 같은 이스케이프 시퀀스를 또 다른 문자열 구문에 대한 지원이 와 . 사용하려면 다음으로 문자열을 시작 하고 다음으로 종료하십시오 .n"my message\n"\n\t$''

curl -X PUT -d $'my message\n' http://localhost:8000/hello

Bash Reference ManualANSI-C Quoting 을 참조하십시오.


1
이것은 나에게도 효과적이었습니다. 큰 따옴표와는 작동하지 않았기 때문에 그것을 가지고 놀아야 할 것입니다. 즉, 문자열 내에 작은 따옴표를 사용할 수 없다는 것을 의미합니다.
Tyler Collier

1
이것이 "JavaScript 쉘 구문"이라는 아이디어를 어디서 얻었는지 모르겠습니다. 쉘은 통과 my message\n, 그대로 하지 당신이 말한대로 두 개의 탈출로.
크리스 아래

@ChrisDown, 당신은 나를 잘못 인용했습니다. "JavaScript 쉘 구문"이 아니라 "JavaScript 문자열 구문"이라고했습니다. 내 문자열 예제에서 의미하는 바를 명확히하기 위해 JavaScript 문자열 구문을 사용하고 있습니다. 나는 당신이 말하는 my message\n것이 내가 말하는 것과 동일 하다고 생각합니다 "my message\n".
Benjamin Atkin 2013 년

2
@BenAtkin 죄송합니다, freudian 슬립. 그러나 내 독서는 여전히 정확했습니다. \nJavaScript와 관련이 없습니다. 사실 여기에는 자바 스크립트와 아무 관련이 없습니다.
크리스 아래

사람들에게 설명하기 위해 사용하고 있습니다. 그리고 그것은 효과가 있었던 것 같습니다. 셸 문자열 구문은 널리 이해되지 않습니다. 그렇다면 왜이 질문을 받았을까요? 그것을 설명하기 위해 무엇을 사용 했어야합니까?
Benjamin Atkin 2013 년

17

훨씬 쉬운 방법이 있습니다!

curl -X PUT -d $'my message\n' http://localhost:8000/hello

이것은 ANSI-C Quoting 을 사용 하여 개행 문자를 삽입합니다.

배관이나 데이터 파일이 없습니다. cURL로 줄 바꿈 보내기 도 참조하십시오 .


그 하나는 사용 배쉬 구문에도 불구하고 수락 된 답을해야한다
odiszapc

이 모든 해답의 날 위해 일한 유일한 일
밥 Kocisko

16

파일을 사용하고 싶지 않고 셸 이스케이프 마법에 의지하고 싶지 않은 사람을위한 솔루션은 다음과 같습니다.

curl -X POST --data-binary @- http://url.com <<EOF
line one
line two
EOF

그러나 이것은 양식 필드가 아닌 포스트 데이터 페이로드의 문자 그대로 줄 바꿈입니다.


이해하는 데 문제가 있습니다. 그 얻을 @파일 이름을 지정하는 것입니다하지만 사용하는 일부 특별한 의미가 @-? 어떻게되는 <<EOF거야?
Dennis T-Monica 복원-'15

1
@-curl에게 표준 입력의 입력을 사용하도록 <<EOF지시하고 bash에 대한 스트림 표시기의 끝입니다. 그런 다음 나중에 EOF데이터 페이로드에서 마법의 단어 를 사용하여 bash에 스트림에 대한 쓰기가 완료되었음을 알립니다.
Jammer 2015 년

또한 -파일 이름이 예상 될 때 STDIN을 지정하는 GNU / Linux의 표준 방식입니다. 보편적 인 것은 아니지만 꽤 일반적입니다.
Rich Remer

설명서를 참조하여 우리는 그냥해야 볼 -하지 @ -
user3504575

9

비슷한 문제가있었습니다. Mac에서 클라우드 스토리지로 csv 파일을 업로드하는 동안 새 줄이 제거되었습니다. 다운로드 후 전체 파일이 한 줄처럼 보입니다. 다른 EOL 문자 '\ n' '\ r' '\ r \ n'을 추가하려고 시도했지만 성공하지 못했습니다. '-d'대신 '--data-binary'를 사용하면 문제가 해결되었습니다. Btw이 문제는 Mac에서만 발생했습니다. '-d'는 CentOS 시스템에서 호출하는 동안 잘 작동했습니다. 이것은 Mac의 개행 문자로 인해 매우 많이 보입니다. 그러나 더 이상 디버깅하고 싶지는 않습니다.

도와 주셔서 정말로 고맙습니다.

curl -X PUT -d @filename.csv https://cloudstorage -H "content-type: text/csv"

VS

curl -X PUT --data-binary @filename.csv https://cloudstorage -H "content-type: text/csv"

고마워요! 이것은 Mac과 관련이 없습니다. Linux에서 똑같은 문제가 발생했으며 사용하여 --data-binary @문제가 해결되었습니다 (여러 줄로 된 .ics 파일을 CalDAV 서버로 전송).
M-Jack

8

(나는 여기에 약간 다른 질문으로 끝났으므로 미래의 탐험가에게 도움이 될 수 있기 때문에 내 답변을 게시 할 것입니다)

내 솔루션은 양식 스타일 데이터, 즉 쿼리 문자열의 키 / 값 쌍을 보내는 사람들에게 적용됩니다. 인코딩 된 줄 바꿈을 사용합니다 . %0A즉, 인코딩 된 공백과 같은 방식입니다 %20. http://meyerweb.com/eric/tools/dencoder/ 를 사용할 수 있습니다 . 를 하여 다른 기호를 변환 .

따라서 키 message를 값 으로 설정하려면 다음 을 수행하십시오.

line one
another

당신은 보낼 것입니다

curl --data "message=line%20one%0Aanother" http://localhost:8000/hello

1
줄 바꿈 / 캐 레이지 리턴 문자에 대한 사소한 주석 (오타 일 수 있음)은 % A0이 아닌 % 0A 여야합니다
Paul

3

귀하의 질문에 대한 대답은 아니지만 메시지와 줄 바꿈이 포함 된 임시 파일을 만들어 해결하고 해당 파일에 대해 작업 할 curl을 제공합니다.

curl -X PUT -d @message.txt http://localhost:8000/hello

로부터 수동 :

@ 문자로 데이터를 시작하는 경우 나머지는 데이터를 읽을 파일 이름이어야합니다. 또는 curl이 stdin에서 데이터를 읽으려면-이어야합니다. 파일 내용은 이미 URL 인코딩되어 있어야합니다. 여러 파일을 지정할 수도 있습니다. 따라서 'foobar'라는 파일에서 데이터를 게시하는 것은 --data @foobar로 수행됩니다.


임시 파일을 사용하는 것은 편리한 방법입니다. Szocske의 답변에 따라 --data-binary-d데이터를 그대로 전송하므로.
William Denniss

7
-1; 와 함께 임시 파일을 사용 -d @/path/to/temp/file.txt하면 줄 바꿈 문제가 해결되지 않습니다. --data-binary위를 참조하십시오.
Frank Olschewski 2013 년

curl을 업그레이드하거나 Windows 10으로 업그레이드 한 후 curl 명령이 작동하지 않는 이유가 궁금하기 때문에이 메시지가 표시되는 경우 파일 참조를 따옴표로 묶어야합니다. 예 : curl -X PUT -d "@ message.txt" localhost : 8000 / hello 내 elasticsearch 재 빌드 스크립트가 작동을 중지했습니다.
joezen777

3

아주 쉬운 방법은 휴식을 위해 콘솔에서 Shift-Enter 만하면됩니다. 그것을 입력하는 것도 매우 읽기 쉽습니다.

curl -d "line1
line2" http-echo.com

Server gets this: line1\nline2

줄 바꿈을 제거하려면 다음을 수행하십시오.

curl -d "line1 \
line2" http-echo.com

Server gets this: line1 line2

-2

나는 원래 여기 https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html 에서 찾은이 코드 (아래 복사)와 함께 Sendgrid를 사용했습니다.

\n\nGmail에서 작동했지만 \n무시되었습니다. 나는 탈출과 다른 제안을 두 배로 늘리려 고 노력했습니다. 나는 또한 시도했지만 \r\nGmail에서도 작동하지 않았습니다. 참고 : 다른 이메일 클라이언트를 테스트하지 않았습니다. 아마도 Gmail 관련 문제 일 수 있습니다.

    curl --request POST \
  --url https://api.sendgrid.com/v3/mail/send \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{"personalizations": [{"to": [{"email": "your.email@example.com"}]}],"from": {"email": "example@example.com"},"subject": "Hello, World!","content": [{"type": "text/plain", "value": "Heya!"}]}'

결국 나는 해결책을 찾고 포기하고 전환 text/plaintext/html그냥 사용하는 <br />태그입니다.

누군가 추적 픽셀을 활성화 한 경우 Sendgrid가 일반 텍스트를 HTML로 변환하도록 제안했습니다. 일반 텍스트에서 HTML로 변환하는 과정에서 줄 바꿈이 삭제되었을 수 있습니다. 클라이언트가 추적 픽셀을 원한다고 가정하므로 HTML로 전환하기로 결정했습니다.

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