ผู้ใช้เรียกสคริปต์ของฉันกับเส้นทางของไฟล์ที่จะได้รับการอย่างใดอย่างหนึ่งจะสร้างหรือเขียนทับในบางจุดในสคริปต์เหมือนหรือfoo.sh file.txtfoo.sh dir/file.txt
พฤติกรรมการสร้างหรือเขียนทับเป็นเหมือนข้อกำหนดสำหรับการวางไฟล์ทางด้านขวาของ>โอเปอเรเตอร์เอาท์พุทหรือส่งต่อเป็นอาร์กิวเมนต์ไปที่tee(อันที่จริงการส่งเป็นอาร์กิวเมนต์เพื่อteeเป็นสิ่งที่ฉันกำลังทำอยู่ )
ก่อนที่ฉันจะเข้าไปในความกล้าของสคริปต์ฉันต้องการตรวจสอบอย่างสมเหตุสมผลว่าไฟล์สามารถสร้าง / เขียนทับได้ แต่ไม่ได้สร้างจริง การตรวจสอบนี้ไม่จำเป็นต้องสมบูรณ์แบบและใช่ฉันรู้ว่าสถานการณ์สามารถเปลี่ยนแปลงได้ระหว่างการตรวจสอบและจุดที่ไฟล์ถูกเขียนจริง - แต่ที่นี่ฉันโอเคด้วยวิธีแก้ไขปัญหาความพยายามที่ดีที่สุดเพื่อให้ฉันสามารถประกันตัวได้เร็ว ในกรณีที่เส้นทางของไฟล์ไม่ถูกต้อง
ตัวอย่างของสาเหตุที่ไฟล์ไม่สามารถสร้างได้:
- ไฟล์มีองค์ประกอบไดเรกทอรีเช่น
dir/file.txtแต่dirไม่มีไดเรกทอรี - ผู้ใช้ไม่มีสิทธิ์ในการเขียนในไดเรกทอรีที่ระบุ (หรือ CWD หากไม่มีการระบุไดเรกทอรี
ใช่ฉันรู้ว่าการตรวจสอบการอนุญาต "ล่วงหน้า" ไม่ใช่The UNIX Way ™แต่ฉันควรลองใช้งานและขอการให้อภัยในภายหลัง ในสคริปต์เฉพาะของฉันสิ่งนี้นำไปสู่ประสบการณ์การใช้งานที่ไม่ดีและฉันไม่สามารถเปลี่ยนองค์ประกอบที่รับผิดชอบได้
/foo/bar/file.txtฉันคิดว่าผู้ใช้สามารถระบุเส้นทางที่แน่นอนเช่น โดยทั่วไปฉันผ่านเส้นทางไปteeเช่นtee $OUT_FILEที่OUT_FILEจะถูกส่งผ่านในบรรทัดคำสั่ง ที่ควร "เพียงแค่ทำงาน" กับทั้งเส้นทางแน่นอนและญาติใช่มั้ย
tee -- "$OUT_FILE"อย่างน้อย ถ้าไฟล์มีอยู่แล้วหรือมีอยู่ แต่ไม่ใช่ไฟล์ปกติ (ไดเรกทอรี, symlink, Fifo)
tee "${OUT_FILE}.tmp"อยู่ หากไฟล์มีอยู่แล้วให้teeเขียนทับซึ่งเป็นลักษณะการทำงานที่ต้องการในกรณีนี้ ถ้าเป็นไดเรกทอรีteeจะล้มเหลว (ฉันคิดว่า) symlink ฉันไม่แน่ใจ 100%?