Tự động thêm dòng mới vào cuối thân phản ứng curl


234

Nếu phần thân phản hồi HTTP cho yêu cầu cuộn tròn không chứa dòng mới, tôi sẽ gặp phải tình trạng thực sự khó chịu này khi dấu nhắc shell nằm ở giữa dòng và thoát ra bị rối đủ để khi tôi đặt cuộn tròn cuối cùng lệnh trên màn hình, xóa các ký tự từ lệnh curl đó xóa các ký tự sai.

Ví dụ:

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

Có một mẹo tôi có thể sử dụng để tự động thêm một dòng mới vào cuối phản hồi curl, để lấy lại lời nhắc ở cạnh trái của màn hình?


Không có câu trả lời nào trong số này trả lời cho tôi với bất kỳ phiên bản curl cài đặt cygwin nào của tôi; chỉ gói toàn bộ lệnh curl trong câu lệnh echo, ví dụ echo "$(curl localhost:8001/api)": câu trả lời này: unix.stackexchange.com/a/217611/110338
Alex Hall

Câu trả lời:


418

Từ tập tin người đàn ông:

Để tốt hơn cho phép các lập trình viên tập lệnh biết về tiến trình của curl, tùy chọn -w / - write-out đã được giới thiệu. Sử dụng điều này, bạn có thể chỉ định thông tin nào từ lần chuyển trước bạn muốn trích xuất.

Để hiển thị số lượng byte được tải xuống cùng với một số văn bản và dòng mới kết thúc:

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

Vì vậy, hãy thử thêm các mục sau vào ~/.curlrctệp của bạn :

-w "\n"

46
Bạn có thể chạy lệnh sau đây thực hiện điều đó cho bạn:echo '-w "\n"' >> ~/.curlrc
tbraun

5
Tôi luôn thêm -w "\n"thủ công vào mỗi lệnh curl và TIL ~/.curlrctồn tại!
Zhuoyun Wei

2
điều này có thể không hoạt động theo git-bash trên Windows; Tôi đã thêm -w "\nKLJLJKLJ LJKLLKJ"vào của tôi ~/.curlrcvà chạy một cuộn tròn và không có một dòng mới hoặc các nhân vật kỳ lạ.
jcollum

@jcollum Một số cổng Windows thích _hơn .. Rất có thể là curl của bạn đang tìm kiếm ~/_curlrcvà do đó echo '-w "\n"' >> ~/_curlrccó thể sẽ làm việc. Nó làm cho tôi. btw: curl sẽ khiếu nại về khoảng trắng không có dấu
vết

Có giá trị trong việc sử dụng dòng lệnh với -w "\n"hoặc nối thêm vào ; echosửa đổi của bạn .curlrc. Nếu bạn sửa đổi curlrc của mình, một số tập lệnh có thể bị hỏng nếu chúng không xử lý một dòng mới ở cuối dữ liệu phản hồi. Cá nhân tôi sẽ gắn bó với các bổ sung trên dòng lệnh thay đổi RC.
Jason

99

Hãy thử điều đó:

curl jsonip.com; echo 

ĐẦU RA

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

Đây là rằng đơn giản;)

(và không giới hạn ở lệnh curl nhưng tất cả các lệnh không kết thúc bằng một dòng mới)


3
Có cách nào để bọc cái này trong một tập lệnh hoặc bí danh bash hoặc bất cứ thứ gì tương tự không? Gõ "; echo" ở cuối mỗi dòng có thể trở nên tẻ nhạt và tôi cảm thấy như thế này có thể được tự động hóa bằng cách nào đó.
Matthew G

Trên SO, tốt hơn là cung cấp một số nỗ lực tìm kiếm. Tìm cách đặt cái này trong bí danh hoặc tập lệnh là điều hiển nhiên.
Gilles Quenot

2
Lưu ý rằng việc thêm lệnh echo sẽ xóa mã thoát khỏi lệnh curl. Tùy chọn -w "\ n" để cuộn tròn được đề xuất trong câu trả lời phổ biến nhất sẽ giữ mã thoát curl có sẵn để kiểm tra.
bradoaks

14

Để biết thêm thông tin cũng như một dòng mới sạch sau khi cuộn tròn

~/.curlrc

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

(Thêm tùy chọn có sẵn ở đây )

redirect_urlsẽ trống nếu yêu cầu không được chuyển hướng hoặc bạn sử dụng -Lđể làm theo chuyển hướng.

Ví dụ đầu ra:

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

Chỉnh sửa , để làm cho mọi thứ dễ đọc hơn, bạn có thể thêm màu ANSI vào -wdòng, không dễ để viết trực tiếp, nhưng tập lệnh này có thể tạo ~/.curlrctệp có màu.

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

Giải pháp chung cho bash là thêm ký hiệu dòng mới vào dấu nhắc lệnh:

Xem câu hỏi liên quan ( Làm thế nào để có một dòng mới trước dấu nhắc bash? ) Và câu trả lời tương ứng

Giải pháp này bao gồm từng lệnh, không chỉ cuộn tròn.

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

Tác dụng phụ duy nhất là bạn nhận được dấu nhắc lệnh sau mỗi dòng thứ 2.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.