Aggiungi automaticamente la nuova riga alla fine del corpo di risposta dell'arricciatura


234

Se il corpo della risposta HTTP per una richiesta di arricciatura non contiene una nuova riga finale, finisco con questa condizione davvero fastidiosa in cui il prompt della shell si trova nel mezzo della linea e l'escaping è abbastanza incasinato che quando inserisco l'ultimo ricciolo comando sullo schermo, eliminando i caratteri dal comando di arricciatura, eliminando i caratteri errati.

Per esempio:

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

C'è un trucco che posso usare per aggiungere automaticamente una nuova riga alla fine di una risposta a ricciolo, per riavere il prompt sul bordo sinistro dello schermo?


Nessuna di queste risposte funziona per me con qualsiasi versione di arricciatura della mia installazione di Cygwin; solo racchiudendo l'intero comando di arricciatura in un'istruzione echo, ad esempio echo "$(curl localhost:8001/api)", si tratta di questa risposta: unix.stackexchange.com/a/217611/110338
Alex Hall,

Risposte:


418

Dal file man:

Per consentire ai programmatori di script di conoscere meglio l'avanzamento del ricciolo, è stata introdotta l'opzione -w / - write-out. Usando questo, è possibile specificare quali informazioni del trasferimento precedente si desidera estrarre.

Per visualizzare la quantità di byte scaricati insieme a del testo e una riga finale:

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

Quindi prova ad aggiungere quanto segue al tuo ~/.curlrcfile:

-w "\n"

46
Puoi eseguire il seguente comando che lo fa per te:echo '-w "\n"' >> ~/.curlrc
tbraun

5
Aggiungo sempre -w "\n"manualmente ad ogni comando di arricciatura e TIL ~/.curlrcesiste!
Zhuoyun Wei,

2
questo potrebbe non funzionare con git-bash su Windows; Ho aggiunto -w "\nKLJLJKLJ LJKLLKJ"al mio ~/.curlrce ho eseguito un ricciolo e non ho ottenuto né una nuova linea né i personaggi strani.
jcollum,

@jcollum Alcune porte di Windows preferiscono _sopra .. È probabile che il tuo ricciolo stia cercando ~/_curlrce di conseguenza echo '-w "\n"' >> ~/_curlrcprobabilmente funzionerà. Lo fa per me. btw: curl si lamenterà di uno spazio bianco senza caratteri di
escape

C'è valore nell'usare la riga di comando con -w "\n"o aggiungere ; echooltre a modificare il tuo .curlrc. Se si modifica il curlrc, alcuni script potrebbero interrompersi se non gestiscono una nuova riga alla fine dei dati di risposta. Personalmente rimarrei con le aggiunte sulla riga di comando sulla modifica dell'rc.
Jason,

99

Prova questo :

curl jsonip.com; echo 

PRODUZIONE

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

Questo è così semplice;)

(e non limitato al comando arricciatura ma a tutti i comandi che non terminano con una nuova riga)


3
C'è un modo per avvolgerlo in uno script o bash alias o qualcosa di simile? Digitare "; echo" alla fine di ogni riga può diventare noioso, e penso che questo dovrebbe poter essere automatizzato in qualche modo.
Matthew G,

Su SO, è meglio fornire qualche sforzo di ricerca. Scoprire come inserirlo in un alias o in uno script è ovvio.
Gilles Quenot,

2
Si noti che l'aggiunta del comando echo cancella il codice di uscita dal comando curl. L'opzione -w "\ n" per arricciare suggerita nella risposta più popolare mantiene il codice di uscita dell'arricciatura disponibile per l'ispezione.
Bradradak

14

Per maggiori informazioni e una nuova linea pulita dopo il ricciolo

~/.curlrc

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

(Altre opzioni sono disponibili qui )

redirect_urlsarà vuoto se la richiesta non viene reindirizzata o si utilizza -Lper seguire il reindirizzamento.

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

Modifica , per rendere le cose più leggibili puoi aggiungere colori ANSI alla -wlinea, non è così facile scrivere direttamente, ma questo script può generare un ~/.curlrcfile con colori.

#!/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

La soluzione generale per bash è aggiungere un simbolo di nuova riga nel prompt dei comandi:

Vedi la domanda correlata ( Come avere una nuova riga prima del prompt di bash? ) E la risposta corrispondente

Questa soluzione copre ogni comando, non solo l'arricciatura.

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

L'unico effetto collaterale è che ricevi il prompt dei comandi dopo ogni 2a riga.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.