Trong Bash và zsh (và có lẽ các shell khác), bạn có thể sử dụng thay thế quy trình ( Bash / zsh ) để tạo tệp khi đang di chuyển, sau đó sử dụng tệp đó làm đầu vào cho quy trình tiếp theo trong chuỗi đường ống.
Ví dụ, tôi đã cố phân tích đầu ra JSON từ cURL bằng cách sử dụng jq
và less
, nhưng đã nhận được Failed writing body
lỗi.
# Note: this does NOT work
curl https://gitlab.com/api/v4/projects/ | jq | less
Khi tôi viết lại nó bằng cách sử dụng thay thế quá trình, nó đã làm việc!
# this works!
jq "" <(curl https://gitlab.com/api/v4/projects/) | less
Lưu ý: jq
sử dụng đối số thứ 2 của nó để chỉ định tệp đầu vào
Bonus: Nếu bạn đang sử dụng jq
như tôi và muốn giữ cho đầu ra colorized trong less
, sử dụng dòng lệnh sau đây thay vì:
jq -C "" <(curl https://gitlab.com/api/v4/projects/) | less -r
(Cảm ơn Kowaru vì đã giải thích lý do tại sao Failed writing body
xảy ra. Tuy nhiên, giải pháp sử dụng tac
hai lần của họ không hiệu quả với tôi. Tôi cũng muốn tìm một giải pháp có thể mở rộng tốt hơn cho các tệp lớn và cố gắng tránh các vấn đề khác được ghi nhận là nhận xét với câu trả lời đó.)