Agregar automáticamente una nueva línea al final del cuerpo de la respuesta curl
Si el cuerpo de la respuesta HTTP para una solicitud curl no contiene una nueva línea final, termino con esta condición realmente molesta en la que el símbolo del shell está en el medio de la línea y el escape es lo suficientemente complicado como para que cuando coloque el último curl comando en la pantalla, eliminar caracteres de ese comando curl elimina los caracteres incorrectos.
Por ejemplo:
[root@localhost ~]# curl jsonip.com
{"ip":"10.10.10.10","about":"/about"}[root@localhost ~]#
¿Existe algún truco que pueda usar para agregar automáticamente una nueva línea al final de una respuesta curl, para que el mensaje vuelva al borde izquierdo de la pantalla?
Del archivo man:
Para permitir que los programadores de scripts conozcan mejor el progreso de curl, se introdujo la opción -w/--write-out. Con esto, puede especificar qué información de la transferencia anterior desea extraer.
Para mostrar la cantidad de bytes descargados junto con algo de texto y una nueva línea final:
curl -w 'We downloaded %{size_download} bytes\n' www.download.com
Intente agregar lo siguiente a su ~/.curlrc
archivo:
-w "\n"
Utilizar esta:
curl jsonip.com; echo
Si necesita agrupación para alimentar una tubería :
{ curl jsonip.com; echo; } | tee new_file_with_newline
PRODUCCIÓN
{"ip":"x.x.x.x","about":"/about"}
Así de sencillo ;)
(y no limitado al comando curl sino a todos los comandos que no terminan con una nueva línea)
Para obtener más información y una nueva línea limpia después del rizo.
~/.curlrc
-w "\nstatus=%{http_code} %{redirect_url} size=%{size_download} time=%{time_total} content-type=\"%{content_type}\"\n"
(Más opciones están disponibles aquí )
redirect_url
estará en blanco si la solicitud no se redirige o si utiliza -L
para seguir la redirección.
Salida de ejemplo:
~ ➤ 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&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"
~ ➤
Editar , para hacer las cosas más legibles puedes agregar colores ANSI a la -w
línea, no es tan fácil escribir directamente, pero este script puede generar un ~/.curlrc
archivo con colores.
#!/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)
La solución general para bash es agregar un símbolo de nueva línea en el símbolo del sistema:
Consulte la pregunta relacionada ( ¿Cómo tener una nueva línea antes del aviso de bash? ) y la respuesta correspondiente
Esta solución cubre cada comando, no solo curl.
echo $PS1 # To get your current PS1 env variable's value aka '_current_PS1_'
PS1='\n_current_PS1_'
El único efecto secundario es que aparece el símbolo del sistema después de cada segunda línea.