Secara otomatis menambahkan baris baru di akhir badan tanggapan ikal

234

Jika badan respons HTTP untuk permintaan ikal tidak berisi baris baru, saya berakhir dengan kondisi yang sangat menjengkelkan ini di mana prompt shell berada di tengah-tengah baris, dan keluar cukup kacau ketika saya meletakkan ikal terakhir perintah di layar, menghapus karakter dari perintah curl menghapus karakter yang salah.

Sebagai contoh:

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

Apakah ada trik yang bisa saya gunakan untuk secara otomatis menambahkan baris baru di akhir respon curl, untuk mendapatkan prompt kembali di tepi kiri layar?

Kevin Burke
sumber
Tidak satu pun dari jawaban ini yang berfungsi untuk saya dengan versi ikal apa pun yang dipasang oleh cygwin saya; hanya membungkus seluruh perintah curl dalam pernyataan gema, misalnya echo "$(curl localhost:8001/api)", jawab jawaban ini: unix.stackexchange.com/a/217611/110338
Alex Hall

Jawaban:

418

Dari file man:

Agar pemrogram skrip lebih mengenal tentang kemajuan curl, opsi -w / - write-out diperkenalkan. Dengan ini, Anda dapat menentukan informasi apa dari transfer sebelumnya yang ingin Anda ekstrak.

Untuk menampilkan jumlah byte yang diunduh bersama dengan beberapa teks dan baris akhir:

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

Jadi coba tambahkan berikut ini ke ~/.curlrcfile Anda :

-w "\n"
David J.
sumber
46
Anda dapat menjalankan perintah berikut yang melakukan itu untuk Anda:echo '-w "\n"' >> ~/.curlrc
tbraun
5
Saya selalu menambahkan -w "\n"secara manual ke setiap perintah curl dan TIL ~/.curlrcada!
Zhuoyun Wei
2
ini mungkin tidak bekerja di bawah git-bash di Windows; Saya menambahkan -w "\nKLJLJKLJ LJKLLKJ"ke saya ~/.curlrcdan menjalankan ikal dan tidak mendapat baris baru atau karakter aneh.
jcollum
@jcollum Beberapa port Windows lebih _lebih .. Peluang yang dicari keriting Anda ~/_curlrcdan akibatnya echo '-w "\n"' >> ~/_curlrcmungkin akan berhasil. Itu untuk saya. btw: curl akan mengeluh tentang spasi kosong
user1129682
Ada gunanya menggunakan baris perintah dengan -w "\n"atau menambahkan ; echomemodifikasi Anda .curlrc. Jika Anda memodifikasi curlrc Anda, beberapa skrip mungkin rusak jika mereka tidak menangani baris baru di akhir data respons. Saya pribadi akan tetap dengan penambahan pada baris perintah atas memodifikasi rc.
Jason
99

Coba itu :

curl jsonip.com; echo 

KELUARAN

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

Ini adalah yang sederhana;)

(dan tidak terbatas pada perintah curl tetapi semua perintah yang tidak selesai dengan baris baru)

Gilles Quenot
sumber
3
Apakah ada cara untuk membungkus ini dalam skrip atau alias bash atau yang serupa? Mengetik "; echo" di akhir setiap baris bisa membosankan, dan saya merasa seperti ini seharusnya bisa otomatis entah bagaimana.
Matthew G
Pada SO, lebih baik menyediakan upaya pencarian. Menemukan cara memasukkan ini ke alias atau skrip sudah jelas.
Gilles Quenot
2
Perhatikan bahwa menambahkan perintah gema membersihkan kode keluar dari perintah curl. Opsi -w "\ n" untuk digulung disarankan dalam jawaban paling populer menjaga kode keluar keriting tersedia untuk diperiksa.
bradoaks
14

Untuk info lebih lanjut dan juga baris baru bersih setelah keriting

~/.curlrc

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

(Lebih banyak opsi tersedia di sini )

redirect_urlakan kosong jika permintaan tidak dialihkan atau Anda gunakan -Luntuk mengikuti arahan ulang.

Contoh output:

~ ➤  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 , untuk membuat hal-hal lebih mudah dibaca Anda dapat menambahkan warna ANSI ke -wbaris, itu tidak mudah untuk menulis secara langsung, tetapi skrip ini dapat menghasilkan ~/.curlrcfile dengan warna.

#!/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)
SColvin
sumber
1

Solusi umum untuk bash adalah menambahkan simbol baris baru ke dalam prompt perintah:

Lihat pertanyaan terkait ( Bagaimana cara membuat baris baru sebelum bash prompt? ) Dan jawaban yang sesuai

Solusi ini mencakup setiap perintah, tidak hanya ikal.

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

Satu-satunya efek samping adalah Anda mendapatkan command prompt setelah setiap baris ke-2.

Dionio
sumber