Adicionar nova linha automaticamente no final do corpo da resposta de ondulação

234

Se o corpo da resposta HTTP para uma solicitação de ondulação não contiver uma nova linha à direita, acabarei com essa condição realmente irritante, na qual o prompt do shell está no meio da linha e a fuga será prejudicada o suficiente para que, quando eu coloquei a última ondulação comando na tela, a exclusão de caracteres desse comando curl exclui os caracteres incorretos.

Por exemplo:

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

Existe um truque que eu possa usar para adicionar automaticamente uma nova linha no final de uma resposta de curvatura, para recuperar o prompt na borda esquerda da tela?

Kevin Burke
fonte
Nenhuma dessas respostas funciona para mim com a versão do curl que minha instalação do cygwin possui; apenas agrupar todo o comando curl em uma instrução echo, por exemplo echo "$(curl localhost:8001/api)", re esta resposta: unix.stackexchange.com/a/217611/110338 #
Alex Hall

Respostas:

418

No arquivo man:

Para permitir melhor aos programadores de scripts conhecer o progresso da curvatura, a opção -w / - write-out foi introduzida. Com isso, você pode especificar quais informações da transferência anterior você deseja extrair.

Para exibir a quantidade de bytes baixados junto com algum texto e uma nova linha final:

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

Portanto, tente adicionar o seguinte ao seu ~/.curlrcarquivo:

-w "\n"
David J.
fonte
46
Você pode executar o seguinte comando que faz isso para você:echo '-w "\n"' >> ~/.curlrc
tbraun
5
Eu sempre adiciono -w "\n"manualmente a cada comando curl e o TIL ~/.curlrcexiste!
Zhuoyun Wei
2
isso pode não funcionar no git-bash no Windows; Eu adicionei -w "\nKLJLJKLJ LJKLLKJ"ao meu ~/.curlrce corri um cacho e não recebi nem uma nova linha nem os personagens estranhos.
Jcollum
@jcollum Algumas portas do Windows preferem _substituir .. Provavelmente, seu cacho está procurando ~/_curlrce, consequentemente echo '-w "\n"' >> ~/_curlrc, provavelmente funcionará. Faz por mim. btw: curl reclamará de espaço em branco sem escape
user1129682 30/11
Existe um valor em usar a linha de comando -w "\n"ou acrescentar ; echosobre a modificação do seu .curlrc. Se você modificar o seu curlrc, alguns scripts poderão ser interrompidos se não manipularem uma nova linha no final dos dados da resposta. Eu pessoalmente ficaria com as adições na linha de comando ao modificar o rc.
Jason
99

Tente isso :

curl jsonip.com; echo 

RESULTADO

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

Este é que simples;)

(e não limitado ao comando curl, mas todos os comandos que não terminam com uma nova linha)

Gilles Quenot
fonte
3
Existe alguma maneira de colocar isso em um script ou alias do bash ou algo semelhante? Digitar "; eco" no final de cada linha pode ser entediante, e acho que isso deve ser automatizado de alguma forma.
Matthew G
No SO, é melhor fornecer algum esforço de pesquisa. Descobrir como colocar isso em um alias ou script é óbvio.
precisa saber é o seguinte
2
Observe que adicionar o comando echo limpa o código de saída do comando curl. A opção -w "\ n" para ondular sugerida na resposta mais popular mantém o código de saída de ondulação disponível para inspeção.
Bradoaks
14

Para obter mais informações, além de uma nova linha limpa após o enrolamento

~/.curlrc

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

(Mais opções estão disponíveis aqui )

redirect_urlficará em branco se a solicitação não for redirecionada ou se você -Lseguir o redirecionamento.

Exemplo de saída:

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

Editar , para tornar as coisas mais legíveis, você pode adicionar cores ANSI à -wlinha, não é tão fácil escrever diretamente, mas esse script pode gerar um ~/.curlrcarquivo com cores.

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

A solução geral para o bash é adicionar um símbolo de nova linha no prompt de comando:

Consulte a pergunta relacionada ( como ter uma nova linha antes do prompt do bash? ) E a resposta correspondente

Esta solução abrange cada comando, não apenas enrolar.

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

O único efeito colateral é que você recebe o prompt de comando após cada 2ª linha.

Dionio
fonte