Kıvrılma yanıt gövdesinin sonuna otomatik olarak yeni satır ekle


234

Bir kıvırma isteği için HTTP yanıt gövdesi bir son satır içermiyorsa, kabuk isteminin satırın ortasında olduğu ve son kıvrımı koyduğumda kaçmanın yeterince berbat olduğu bu gerçekten sinir bozucu durumla sonuçlanırım Ekrandaki komut, o kıvrılma komutundan karakterleri silmek yanlış karakterleri silmek.

Örneğin:

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

Ekranın sol kenarına bilgi istemi almak için bukle yanıtının sonuna otomatik olarak yeni satır eklemek için kullanabileceğim bir numara var mı?


Bu cevapların hiçbiri benim cygwin kurulumumun sahip olduğu curl sürümünde işe yaramıyor; tüm curl komutunun bir echo ifadesinde sarılması, örneğin echo "$(curl localhost:8001/api)", bu yanıtı tekrar eder: unix.stackexchange.com/a/217611/110338
Alex Hall

Yanıtlar:


418

Man dosyasından:

Komut dosyası programcılarının kıvrımın ilerleyişi hakkında bilgi sahibi olmalarını sağlamak için -w / - yazma seçeneği tanıtıldı. Bunu kullanarak, önceki aktarımdan hangi bilgileri ayıklamak istediğinizi belirleyebilirsiniz.

Bazı metinler ve bir bitiş satırıyla birlikte indirilen bayt miktarını görüntülemek için:

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

~/.curlrcDosyanıza aşağıdakileri eklemeyi deneyin :

-w "\n"

46
Bunu sizin için yapan aşağıdaki komutu çalıştırabilirsiniz:echo '-w "\n"' >> ~/.curlrc
tbraun

5
-w "\n"Her curl komutuna her zaman manuel olarak ekliyorum ve TIL ~/.curlrcvar!
Zhuoyun Wei

2
bu Windows'ta git-bash altında çalışmayabilir; Eklediğim -w "\nKLJLJKLJ LJKLLKJ"kardeşime karşı ~/.curlrcve bir kıvrım koştu ve yeni bir satır veya garip karakterler ne var.
jcollum

@jcollum Bazı Windows portlar tercih _üzerinde .. Şansınız aradığınız ~/_curlrcve sonuç olarak echo '-w "\n"' >> ~/_curlrcmuhtemelen işe yarayacağıdır. Benim için öyle. btw: curl
kaçışsız boşluktan

Komut satırını ile değiştirmenin -w "\n"veya ; echoüzerinde değişiklik yapmanın bir değeri vardır .curlrc. Curlrc'nizi değiştirirseniz, yanıt verilerinin sonunda bir satırsonu işlemezse bazı komut dosyaları bozulabilir. Şahsen, rc'yi değiştirmek için komut satırındaki eklemelerle yapışırdım.
Jason

99

Bunu dene :

curl jsonip.com; echo 

ÇIKTI

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

Bu kadar basit;)

(ve curl komutu ile değil, yeni satırla bitmeyen tüm komutlarla sınırlı)


3
Bunu bir script veya bash takma adına veya benzer bir şeye sarmanın herhangi bir yolu var mı? Her satırın sonuna "; echo" yazmak sıkıcı olabilir ve bunun bir şekilde otomatikleştirilmesi gerektiğini hissediyorum.
Matthew G

SO'da, biraz arama çabası sağlamak daha iyidir. Bunu bir takma ada veya komut dosyasına nasıl koyacağınızı bulmak açıktır.
Gilles Quenot

2
Echo komutunu eklemenin, çıkış kodunu curl komutundan temizlediğine dikkat edin. En popüler yanıtta önerilen kıvrılma -w "\ n" seçeneği, kıvrılma çıkış kodunu denetim için kullanılabilir durumda tutar.
bradoaks

14

Daha fazla bilgi ve kıvrılma sonrası yeni bir satır için

~/.curlrc

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

(Daha fazla seçenek burada mevcuttur )

redirect_urlistek yeniden yönlendirilmezse veya yönlendirmeyi -Lizlemek için kullanılırsa boş olur .

Örnek çıktı:

~ ➤  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"
~ ➤  

Düzenleyin , işleri daha okunabilir hale getirmek için -whatta ANSI renkleri ekleyebilirsiniz , doğrudan yazmak o kadar kolay değil, ancak bu komut ~/.curlrcdosyası renklerle bir dosya oluşturabilir .

#!/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 için genel çözüm, komut istemine yeni satır sembolü eklemektir:

İlgili soruya ( Bash isteminden önce yeni satır nasıl alınır? ) Ve ilgili cevaba bakınız

Bu çözüm sadece kıvrılmayı değil, her komutu kapsar.

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

Tek yan etki, her 2. satırdan sonra komut istemi almanızdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.