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


234

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

Например:

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

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


Ни один из этих ответов не работает для меня с любой версией curl, которую имеет моя установка cygwin; Например echo "$(curl localhost:8001/api)", только завершение всей команды curl в операторе echo дает следующий ответ: unix.stackexchange.com/a/217611/110338
Алекс Холл,

Ответы:


418

Из файла man:

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

Чтобы отобразить количество загруженных байтов вместе с текстом и завершающим переводом строки:

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

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

-w "\n"

46
Вы можете выполнить следующую команду, которая сделает это за вас:echo '-w "\n"' >> ~/.curlrc
tbraun

5
Я всегда добавляю -w "\n"вручную к каждой команде curl и TIL ~/.curlrcсуществует!
Чжуоюнь Вэй

2
это может не работать в git-bash в Windows; Я добавил -w "\nKLJLJKLJ LJKLLKJ"к своему ~/.curlrcи запустил локон и не получил ни новой строки, ни странных символов.
17

@jcollum Некоторые порты Windows предпочитают _более .. Скорее всего, ваш локон ищет ~/_curlrcи, следовательно echo '-w "\n"' >> ~/_curlrc, вероятно, будет работать. Это для меня. Кстати: curl будет жаловаться на
неиспользуемые

Есть смысл в использовании командной строки с -w "\n"добавлением или ; echoизменении над вашим .curlrc. Если вы измените свой curlrc, некоторые скрипты могут сломаться, если они не обрабатывают символ новой строки в конце данных ответа. Я лично придерживаюсь дополнений в командной строке над изменением rc.
Джейсон

99

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

curl jsonip.com; echo 

ВЫВОД

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

Это что просто;)

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


3
Есть ли способ обернуть это в сценарий или псевдоним Bash или что-нибудь подобное? Ввод "; echo" в конце каждой строки может быть утомительным, и я чувствую, что это можно каким-то образом автоматизировать.
Мэтью Дж

На SO лучше поискать. Поиск того, как поместить это в псевдоним или скрипт, очевиден.
Жиль Квено,

2
Обратите внимание, что добавление команды echo очищает код выхода из команды curl. Параметр -w "\ n" для скручивания, предложенный в самом популярном ответе, сохраняет код завершения скручивания доступным для проверки.
Bradoaks

14

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

~/.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)

1

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

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.