Автоматично додайте нову лінію в кінці тіла реакції на завивку


234

Якщо тіло відповіді HTTP на запит на згортання не містить зворотного нового рядка, я закінчую це дійсно дратує умову, коли підказки оболонки знаходяться в середині рядка, а втеча заплутається достатньо, що коли я кладу останній завиток команда на екрані, видалення символів з цієї команди curl видалення неправильних символів.

Наприклад:

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

Чи є хитрість, яку я можу використати, щоб автоматично додати новий рядок в кінці відповіді на завивку, щоб повернути запит на лівий край екрана?


Жодна з цих відповідей не працює для мене з будь-якою версією curl, яку встановила моя cygwin; лише загортання всієї команди curl в оператор echo робить, наприклад echo "$(curl localhost:8001/api)", повторну відповідь: unix.stackexchange.com/a/217611/110338
Alex Hall

Відповіді:


418

З файлу man:

Щоб краще дозволити програмістам сценаріїв ознайомитись із прогресом згортання, була введена опція -w / - списання. Використовуючи це, ви можете вказати, яку інформацію з попередньої передачі ви хочете витягти.

Щоб відобразити кількість завантажених байтів разом з деяким текстом та закінчуючим новим рядком:

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і побіг завиток і не отримав ні нового рядка, ні дивних символів.
jcollum

@jcollum Деякі порти Windows , вважають за краще _більше .. Цілком ймовірно , що ваш локон шукає ~/_curlrcі, отже echo '-w "\n"' >> ~/_curlrc, ймовірно, спрацює. Це робить для мене. btw: curl поскаржиться на
непрограмований

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

99

Спробуйте:

curl jsonip.com; echo 

ВИХІД

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

Це що просто;)

(і не обмежується командою curl, але всіма командами, які не закінчуються новим рядком)


3
Чи є якийсь спосіб, щоб загорнути це в сценарій або псувати псевдонім чи щось подібне? Введення "; відлуння" в кінці кожного рядка може набриднути, і я відчуваю, що це потрібно якось автоматизувати.
Матвій Г

Щодо 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? ) Та відповідну відповідь

Це рішення охоплює кожну команду, а не лише згортання.

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

Єдиним побічним ефектом є те, що ви отримуєте командний рядок після кожного 2-го рядка.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.