เพิ่มบรรทัดใหม่โดยอัตโนมัติเมื่อสิ้นสุดการตอบสนองเนื้อหา


234

หากเนื้อหาการตอบสนอง HTTP สำหรับคำขอ curl ไม่มีบรรทัดใหม่ต่อท้ายฉันจะจบลงด้วยเงื่อนไขที่น่ารำคาญจริง ๆ ที่ shell prompt อยู่ตรงกลางบรรทัด คำสั่งบนหน้าจอการลบตัวอักษรจากคำสั่ง curl นั้นจะลบตัวอักษรที่ไม่ถูกต้อง

ตัวอย่างเช่น:

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

มีเคล็ดลับที่ฉันสามารถใช้เพื่อเพิ่มบรรทัดใหม่โดยอัตโนมัติเมื่อสิ้นสุดการตอบสนองการขดเพื่อรับการแจ้งกลับบนขอบด้านซ้ายของหน้าจอหรือไม่


คำตอบเหล่านี้ไม่เหมาะกับฉันไม่ว่าจะติดตั้ง cygwin ของฉันในเวอร์ชันใด การตัดคำสั่ง curl ทั้งหมดในคำสั่ง echo เท่านั้นเช่นecho "$(curl localhost:8001/api)"คำตอบนี้อีกครั้ง: unix.stackexchange.com/a/217611/110338
Alex Hall

คำตอบ:


418

จากไฟล์ man:

เพื่อให้ผู้เขียนโปรแกรมสคริปต์ได้รับทราบเกี่ยวกับความคืบหน้าของ curl มากขึ้นจึงได้มีการแนะนำตัวเลือกการเขียนออก ใช้สิ่งนี้คุณสามารถระบุข้อมูลจากการถ่ายโอนก่อนหน้าที่คุณต้องการแยก

หากต้องการแสดงจำนวนไบต์ที่ดาวน์โหลดพร้อมกับข้อความและบรรทัดใหม่ที่ลงท้ายด้วย:

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

ดังนั้นลองเพิ่มสิ่งต่อไปนี้ใน~/.curlrcไฟล์ของคุณ:

-w "\n"

46
คุณสามารถเรียกใช้คำสั่งต่อไปนี้ที่ทำเพื่อคุณ:echo '-w "\n"' >> ~/.curlrc
tbraun

5
ฉันมักจะเพิ่ม-w "\n"คำสั่ง curl ทุกครั้งด้วยตนเองและ~/.curlrcมีTIL อยู่เสมอ!
Zhuoyun Wei

2
สิ่งนี้อาจไม่ทำงานภายใต้ git-bash บน Windows ฉันเพิ่ม-w "\nKLJLJKLJ LJKLLKJ"ของฉัน~/.curlrcและวิ่งม้วนและไม่ได้ขึ้นบรรทัดใหม่หรือตัวละครแปลก ๆ
jcollum

@jcollum บางพอร์ตของ Windows ต้องการมากกว่า_ .โอกาสที่ขดของคุณกำลังมองหา~/_curlrcและดังนั้นecho '-w "\n"' >> ~/_curlrcอาจจะทำงาน มันทำเพื่อฉัน btw: curl จะบ่นกับช่องว่างที่ไม่ใช้ค่า Escape
user1129682

มีความคุ้มค่าในการใช้บรรทัดคำสั่งด้วย-w "\n"หรือท้ายมากกว่าการปรับเปลี่ยนของคุณ; echo .curlrcหากคุณแก้ไข curlrc ของคุณสคริปต์บางตัวอาจแตกถ้าไม่จัดการบรรทัดใหม่ในตอนท้ายของข้อมูลการตอบกลับ โดยส่วนตัวแล้วฉันจะติดกับการเพิ่มในบรรทัดคำสั่งมากกว่าการแก้ไข rc
เจสัน

99

ลองที่:

curl jsonip.com; echo 

เอาท์พุท

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

นี้เป็นที่เรียบง่าย;)

(และไม่ จำกัด เฉพาะคำสั่ง curl แต่คำสั่งทั้งหมดที่ไม่เสร็จด้วยการขึ้นบรรทัดใหม่)


3
มีวิธีการห่อนี้ในสคริปต์หรือทุบตีนามแฝงหรืออะไรที่คล้ายกัน? พิมพ์ดีด "; echo" ในตอนท้ายของทุกบรรทัดอาจทำให้เบื่อและฉันรู้สึกว่ามันน่าจะเป็นแบบอัตโนมัติได้
Matthew G

ดังนั้นจะเป็นการดีกว่าที่จะให้ความพยายามในการค้นหา การค้นหาวิธีใส่สิ่งนี้ในนามแฝงหรือสคริปต์จะชัดเจน
Gilles Quenot

2
ขอให้สังเกตว่าการเพิ่มคำสั่ง echo ล้างรหัสออกจากคำสั่ง 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"
~ ➤  

แก้ไขเพื่อให้สิ่งต่าง ๆ อ่านง่ายขึ้นคุณสามารถเพิ่มสี 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)

1

โซลูชันทั่วไปสำหรับ bash คือการเพิ่มสัญลักษณ์ขึ้นบรรทัดใหม่ในพรอมต์คำสั่ง:

ดูคำถามที่เกี่ยวข้อง ( วิธีการขึ้นบรรทัดใหม่ก่อน bash prompt? ) และคำตอบที่เกี่ยวข้อง

โซลูชันนี้ครอบคลุมคำสั่งแต่ละคำสั่งไม่เพียง แต่ม้วนงอ

echo $PS1 # To get your current PS1 env variable's value aka '_current_PS1_'
PS1='\n_current_PS1_'

ผลข้างเคียงเดียวคือคุณได้รับคำสั่งหลังจากแต่ละบรรทัดที่ 2

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.