Linux มีอินเทอร์เฟซที่ดีสำหรับการตรวจสอบเหตุการณ์ของระบบไฟล์ทั้งหมดเช่นการสร้างการแก้ไขการลบไฟล์ อินเทอร์เฟซคือinotifyตระกูลของการเรียกใช้ระบบยูทิลิตี้ userspace ที่ใช้ประโยชน์จากการโทรเหล่านี้จัดทำโดยinotify-toolsแพคเกจใน Ubuntu (มีอยู่ในที่เก็บจักรวาล) หากคุณยังไม่มีให้ติดตั้งโดย:
sudo apt-get install inotify-tools
inotify-toolsให้inotifywaitและinotifywatchไบนารีเราต้องการคนแรก
ดังนั้นคุณต้องการเรียกใช้คำสั่งasciidoctor -q some_fileเมื่อ.adocมีการแก้ไขไฟล์ใด ๆ( some_fileจะถูกแทนที่ด้วย) หากสมมติว่า.adocไฟล์ของคุณอยู่ในไดเรกทอรี/foo/barคุณสามารถตั้งค่าการตรวจสอบ:
inotifywait -qm --event modify --format '%w' /foo/bar/*.adoc
-qเปิดใช้งานโหมดเงียบไม่มีข้อมูลจากinotifywaitตัวเอง
-m เปิดใช้งานโหมดจอภาพมิฉะนั้นจะออกหลังจากเหตุการณ์แรก
--event modifyเราสนใจเฉพาะmodifyเหตุการณ์เช่นเมื่อไฟล์ถูกแก้ไข ค่าที่เป็นไปได้อื่น ๆ ได้แก่open, closeฯลฯ
--format %wเราต้องการแค่ชื่อไฟล์ที่ถูกแก้ไขแทนที่จะเป็นมัดข้อมูลอื่น ๆ เพราะเราจะใช้ชื่อไฟล์เป็นอินพุตไปยังคำสั่งอื่น
/foo/bar/*.adocจะถูกขยายเป็น.adocไฟล์ทั้งหมดภายใต้/foo/barไดเรกทอรี
ตอนนี้ข้างต้นจะแสดงชื่อไฟล์ของคุณเมื่อใดก็ตามที่มีการแก้ไขใด ๆ ตอนนี้ให้เรียกใช้คำสั่งในชื่อไฟล์ (สมมติว่าคำสั่งใช้อาร์กิวเมนต์ผ่าน STDIN):
inotifywait -qm --event modify --format '%w' /foo/bar/*.adoc | asciidoctor -q
คุณยังสามารถตั้งค่านาฬิกาแบบเรียกซ้ำในไดเรกทอรีจากนั้นคุณจะต้องใช้grepเพื่อกรองไฟล์ที่ต้องการเท่านั้น ที่นี่การตั้งค่านาฬิกาซ้ำ ( -r) ในไดเรกทอรี/foo/barและใช้grepในการกรอง.adocไฟล์เท่านั้น:
inotifywait -qrm --event modify --format '%w%f' /foo/bar | grep '\.adoc$' | asciidoctor -q
เมื่อดูไดเรกทอรีตัวระบุรูปแบบผลลัพธ์%wจะเปลี่ยนเป็นชื่อไดเรกทอรีดังนั้นเราจำเป็นต้อง%fได้รับชื่อไฟล์ ในขณะที่ดูไฟล์%fจะแก้ไขเป็นสตริงว่าง
โปรดทราบว่าคุณยังสามารถเรียกใช้inotifywaitใน-dโหมดdaemon ( ) คุณยังสามารถเขียนสคริปต์ทั้งหมดและ / หรือทำงานในพื้นหลังและ / หรือเล่นกับตัวเลือกอื่น ๆ
นอกจากนี้คุณสามารถแทนที่asciidoctorด้วยคำสั่งอื่น ๆ ที่คุณเลือกหากคุณต้องการ
ตรวจสอบman inotifywaitเพื่อรับแนวคิดเพิ่มเติม