ใน Bash และ zsh (และบางทีเชลล์อื่น ๆ ) คุณสามารถใช้การทดแทนกระบวนการ ( Bash / zsh ) เพื่อสร้างไฟล์ได้ทันทีจากนั้นใช้สิ่งนั้นเป็นอินพุตไปยังกระบวนการถัดไปในไปป์ไลน์ไปป์ไลน์
ตัวอย่างเช่นฉันพยายามแยกเอาต์พุต JSON จาก cURL โดยใช้jqและlessได้รับFailed writing bodyข้อผิดพลาด
# Note: this does NOT work
curl https://gitlab.com/api/v4/projects/ | jq | less
เมื่อฉันเขียนใหม่โดยใช้การทดแทนกระบวนการมันใช้งานได้!
# this works!
jq "" <(curl https://gitlab.com/api/v4/projects/) | less
หมายเหตุ: jqใช้อาร์กิวเมนต์ตัวที่ 2 เพื่อระบุไฟล์อินพุต
โบนัส: หากคุณใช้งานjqเหมือนฉันและต้องการเก็บเอาท์พุท colorizedไว้lessให้ใช้บรรทัดคำสั่งต่อไปนี้แทน:
jq -C "" <(curl https://gitlab.com/api/v4/projects/) | less -r
(ขอบคุณKowaruสำหรับคำอธิบายว่าทำไมถึง Failed writing bodyเกิดขึ้นอย่างไรก็ตามวิธีแก้ปัญหาในการใช้tacสองครั้งไม่ได้ผลสำหรับฉันฉันยังต้องการค้นหาวิธีแก้ปัญหาที่จะขยายขนาดให้ดีขึ้นสำหรับไฟล์ขนาดใหญ่และพยายามหลีกเลี่ยงปัญหาอื่น ๆ กับคำตอบนั้น)