ผู้ใช้เรียกสคริปต์ของฉันกับเส้นทางของไฟล์ที่จะได้รับการอย่างใดอย่างหนึ่งจะสร้างหรือเขียนทับในบางจุดในสคริปต์เหมือนหรือfoo.sh file.txt
foo.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%?