ไม่ว่าคุณจะแก้ปัญหานี้อย่างไร คุณจะต้องบัฟเฟอร์เอาต์พุตคำสั่งจนกว่าคุณจะสามารถอ่านบรรทัดสุดท้ายได้ เพื่อที่จะรู้ว่าต้องเขียนตรงไหน
วิธีเดียวที่เหมาะสมที่ฉันคิดได้คือใช้ไฟล์ชั่วคราว จากนั้นเปลี่ยนชื่อ:
tmpfile=$(mktemp)
outfile=$(คำสั่ง | tee "$tmpfile" | หาง -n 1)
mv "$tmpfile" "$outfile"
คุณสามารถเปลี่ยน |
ถึง |&
หากคุณต้องการจับภาพทั้ง stdout และ stderr - แต่โปรดทราบว่าสิ่งนี้ อาจ ส่งผลให้เกิดการตั้งชื่อไฟล์เอาต์พุตหลังจากข้อความแสดงข้อผิดพลาด (แม้ว่าจะมีวิธีหลีกเลี่ยงโดยใช้ตัวอธิบายไฟล์ที่ชาญฉลาด fu)
อาจเป็นไปได้ที่จะใช้โซลูชันอื่นโดยใช้ ฟองน้ำ
คำสั่ง (จากแพ็คเกจ เพิ่มเติม
) แต่นั่นน่าจะใช้เทคนิคเดียวกันภายใต้ประทุน ในความเป็นจริงหน้าคนกล่าวว่า
เมื่อเป็นไปได้ ฟองน้ำจะสร้างหรืออัปเดตไฟล์เอาต์พุตทีละอะตอม
เปลี่ยนชื่อไฟล์ temp ให้เข้าที่
ตัวเลือกอื่นอาจใช้ รายได้
เพื่อกลับบรรทัดเพื่อให้คุณอ่านบรรทัดสุดท้ายก่อน แล้วจึง รายได้
อีกครั้งเพื่อเรียกคืนลำดับเอาต์พุต อย่างไรก็ตามนั่นเกี่ยวข้องกับการบัฟเฟอร์เอาต์พุตทั้งหมด สองครั้ง.