Автоматически добавлять новую строку в конце тела завивки

Если тело ответа HTTP для запроса на завивание не содержит завершающей новой строки, я получаю это действительно раздражающее условие, когда приглашение оболочки находится в середине строки, и экранирование настолько перепутано, что когда я помещаю последняя команда curl на экране, удаление символов из этой команды curl удаляет неправильные символы.

Например:

[[email protected] ~]# curl jsonip.com
{"ip":"10.10.10.10","about":"/about"}[[email protected] ~]#

Есть ли трюк, который я могу использовать для автоматического добавления новой строки в конце отклика, чтобы вернуть запрос на левый край экрана?

Ответ 1

Из файла man:

Чтобы лучше позволить программистам script узнать о прогрессе curl, была выбрана опция -w/- write-out. Используя это, вы можете указать какую информацию из предыдущей передачи вы хотите извлечь.

Чтобы отобразить количество байтов, загруженных вместе с некоторым текстом и endline:

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

Попробуйте добавить следующее к вашему файлу ~/.curlrc:

-w "\n"

Ответ 2

Попробуй это:

curl jsonip.com; echo 

ВЫХОД

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

Это так просто;)

(и не только команда curl, но все команды, которые не заканчиваются переводом строки)

Ответ 3

Для получения дополнительной информации, а также чистой новой строки после завитка

~/.curlrc

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

(Дополнительные параметры доступны здесь)

redirect_url будет пустым, если запрос не будет перенаправлен или вы используете -L чтобы выполнить перенаправление.

Пример вывода:

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

Отредактируйте, чтобы сделать вещи более читабельными, вы можете добавить цвета ANSI в -w, это не так просто написать напрямую, но этот скрипт может генерировать файл ~/.curlrc с цветами.

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

Ответ 4

Общее решение для bash - добавить символ новой строки в командную строку:

См. Связанный вопрос (Как получить новую строку перед приглашением bash?) И соответствующий ответ

Это решение охватывает каждую команду, а не только curl.

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

Единственным побочным эффектом является то, что вы получаете командную строку после каждой второй строки.