ทำไมการเปลี่ยนเส้นทางไปยังไฟล์เดียวกันจึงตัดไฟล์


11

โดยปกติเราจะใช้ไฟล์อื่นเพื่อเปลี่ยนเส้นทางเอาต์พุต

ตัวอย่างเช่น :

cat < first > temp

ในคำสั่งนี้เนื้อหาของแรกจะถูกเปลี่ยนเส้นทางไปยัง temp แทนการส่งออกมาตรฐาน

ถ้าอย่างนั้นทำไมไฟล์มันถึงตัดทอนถ้าฉันใช้ชื่อไฟล์เดียวกัน

เหตุใดจึงไม่สามารถเขียนทับไฟล์เดียวกันได้

cat < first > first 

คำตอบ:


19

เมื่อคุณใช้การเปลี่ยนทิศทาง I / O เช่นนั้นไฟล์ "อินพุต" และ "เอาต์พุต" จะถูกเปิดโดยเชลล์ก่อนที่คำสั่งจะถูกดำเนินการ และการเปิดไฟล์สำหรับการเขียนทับนั้นเหมือนกับการตัดทอนก่อนเขียน ผลลัพธ์: catเห็นไฟล์ว่างบนอินพุต ...


0

เนื่องจากการจัดการในกรณีทั่วไปจะมีความซับซ้อนมาก ลองพิจารณาตัวอย่างต่อไปนี้:

โปรแกรมอ่านบรรทัดไฟล์โดยบรรทัดและเอาต์พุตแต่ละบรรทัดสองครั้ง ตอนนี้เพื่อให้ทำงานโดยไม่มีไฟล์ที่สอง (เช่นไฟล์เดียวกัน) โปรแกรมจะต้องบัฟเฟอร์ส่วนใหญ่ (ทั้งหมด) ของบรรทัดที่มันจะอ่านเพราะพวกเขาจะถูกเขียนทับอย่างอื่นก่อนที่พวกเขาจะสามารถอ่าน

เพื่อให้โปรแกรมง่าย ๆ มักจะใช้ไฟล์รองไฟล์ชั่วคราวซึ่งจะย้ายไปที่ไฟล์ดั้งเดิมเมื่อเสร็จสิ้น นี่เป็นตัวอย่างการทำงานsed -i(inline)


0

cat first > tempโดยปกติไวยากรณ์สำหรับการเปลี่ยนเส้นทางในครั้งนี้เป็นกรณีที่ควรจะเป็น ซึ่งหมายความว่าcatการส่งออก 'ของถูกส่งไปยังไฟล์ของfirst tempในกรณีของใบแจ้งยอดของคุณcat < first > tempผลลัพธ์catยังไม่เสร็จสมบูรณ์ในเวลาที่ถูกเปลี่ยนเส้นทางไปยังออกอีกครั้ง ไม่มีอะไรในผลลัพธ์ที่ออกอะไร

อย่างไรก็ตามไอเอ็นจีไฟล์และการส่งออกเปลี่ยนเส้นทางไปยังไฟล์อื่นจะไม่แตกต่างจากพื้นฐานcatcp


cat < first > tempทำงานได้ดี
JanC
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.