Câu trả lời:
thêm -s
tùy chọn (im lặng) để xóa đồng hồ đo tiến độ, sau đó chuyển hướng stderr sang thiết bị xuất chuẩn để nhận đầu ra dài dòng trên cùng fd với thân phản hồi
curl -vs google.com 2>&1 | less
2>&1
.
URL của bạn có thể có ký hiệu trong đó. Tôi cũng gặp vấn đề này và tôi nhận ra rằng URL của tôi chứa đầy ký hiệu (từ các biến CGI được thông qua) và vì vậy mọi thứ được gửi đến nền theo cách kỳ lạ và do đó không chuyển hướng đúng. Nếu bạn đặt dấu ngoặc kép xung quanh URL, nó sẽ sửa nó.
Câu trả lời ở trên không hiệu quả với tôi, cuối cùng thì cú pháp này là gì:
curl https://${URL} &> /dev/stdout | tee -a ${LOG}
tee đặt đầu ra trên màn hình, nhưng cũng gắn nó vào nhật ký của tôi.
&> /dev/stdout
chắc chắn là phần còn thiếu, cảm ơn
Nếu bạn cần đầu ra trong một tệp, bạn có thể sử dụng chuyển hướng:
curl https://vi.stackexchange.com/ -vs >curl-output.txt 2>&1
Hãy chắc chắn không lật >curl-output.txt
và 2>&1
, nó sẽ không hoạt động do hành vi chuyển hướng của bash .
Tôi đã tìm thấy điều tương tự: chính nó sẽ in sang STDOUT, nhưng không thể chuyển sang chương trình khác.
Lúc đầu, tôi nghĩ rằng tôi đã giải quyết nó bằng cách sử dụng xargs để lặp lại đầu ra:
curl -s ... <url> | xargs -0 echo | ...
Nhưng sau đó, như đã chỉ ra trong các bình luận, nó cũng hoạt động mà không có phần xargs, vì vậy -s
(chế độ im lặng) là chìa khóa để ngăn chặn đầu ra tiến trình không liên quan đến STDOUT:
curl -s ... <url> | perl -ne 'print $1 if /<sometag>([^<]+)/'
Ví dụ trên lấy <sometag>
nội dung đơn giản (không chứa thẻ nhúng) từ đầu ra XML của câu lệnh curl.
Chỉ cần 2 xu của tôi. Lệnh dưới đây nên thực hiện thủ thuật, như đã trả lời trước đó
curl -vs google.com 2>&1
Tuy nhiên nếu cần lấy đầu ra cho một tập tin,
curl -vs google.com > out.txt 2>&1
nên làm việc.
Ví dụ đơn giản này cho thấy cách nắm bắt đầu ra curl và sử dụng nó trong tập lệnh bash
function main
{
\curl -vs 'http://google.com' 2>&1
# note: add -o /tmp/ignore.png if you want to ignore binary output, by saving it to a file.
}
# capture output of curl to a variable
OUT=$(main)
# search output for something using grep.
echo
echo "$OUT" | grep 302
echo
echo "$OUT" | grep title
curl -v url 2>&1
, các lỗi được chuyển hướng chính xác đến đầu ra tiêu chuẩn cho tôi.