ใน 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
สองครั้งไม่ได้ผลสำหรับฉันฉันยังต้องการค้นหาวิธีแก้ปัญหาที่จะขยายขนาดให้ดีขึ้นสำหรับไฟล์ขนาดใหญ่และพยายามหลีกเลี่ยงปัญหาอื่น ๆ กับคำตอบนั้น)