นี่เป็นเพราะ bash ประมวลผลการเปลี่ยนเส้นทางด้วยอัน>
แรกลบเนื้อหาของไฟล์ จากนั้นมันรันคำสั่ง หากคุณใช้งาน>>
50 บรรทัดสุดท้ายจะต่อท้ายสิ่งที่อยู่ในไฟล์ ในกรณีนี้คุณจะต้องซ้ำ 50 บรรทัดซ้ำสองครั้ง
คำสั่งทำงานได้ตามที่คาดไว้เมื่อเปลี่ยนเส้นทางไปยังไฟล์อื่น นี่เป็นวิธีหนึ่งในการเขียน 50 บรรทัดสุดท้ายของไฟล์ไปยังไฟล์ที่มีชื่อเดียวกัน:
tail -50 /home/pi/Documents/test > /home/pi/Documents/test2 && mv /home/pi/Documents/test2 /home/pi/Documents/test
นี่เป็นครั้งแรกที่เขียน 50 บรรทัดสุดท้ายไปยังไฟล์ชั่วคราวซึ่งจะถูกย้ายโดยใช้mv
เพื่อแทนที่ไฟล์ต้นฉบับ
ตามที่ระบุไว้ในความคิดเห็นสิ่งนี้จะไม่ทำงานหากไฟล์ยังคงเปิดอยู่ การย้ายไฟล์ยังสร้าง inode ใหม่และอาจเปลี่ยนความเป็นเจ้าของและสิทธิ์ วิธีที่ดีกว่าในการทำเช่นนี้โดยใช้ไฟล์ชั่วคราวคือ:
tail -50 /home/pi/Documents/test > /home/pi/Documents/test2 ; cat /home/pi/Documents/test2 > /home/pi/Documents/test
ไฟล์ชั่วคราวสามารถลบได้แม้ว่าทุกครั้งที่เกิดเนื้อหาจะถูกเขียนทับ