inotifywait -m
คือโหมด "monitor" : ไม่เคยออก เชลล์รันมันและรอโค้ดออกให้ทราบว่าจะรันเนื้อความของลูปหรือไม่
หากคุณลบ-m
มันจะทำงาน:
while inotifywait -r -e close_write "/root/secondfolder/"
do
echo "close_write"
done
ผลิต
Setting up watches. Beware: since -r was given, this may take a while!
Watches established.
/root/secondfolder/ CLOSE_WRITE,CLOSE bar
close_write
Setting up watches. Beware: since -r was given, this may take a while!
Watches established.
...
โดยค่าเริ่มต้น inotifywait จะ "ออกหลังจากเหตุการณ์แรกที่เกิดขึ้น" ซึ่งเป็นสิ่งที่คุณต้องการในสภาพลูป
แต่คุณอาจต้องการอ่านเอาต์พุตมาตรฐานของinotifywait
:
#!/bin/bash
while read line
do
echo "close_write: $line"
done < <(inotifywait -mr -e close_write "/tmp/test/")
นี้ (ทุบตี) สคริปต์จะอ่านแต่ละบรรทัดผลลัพธ์ของinotifywait
คำสั่งลงใน$line
ตัวแปรภายในวงที่ใช้ทดแทนกระบวนการ มันหลีกเลี่ยงการตั้งค่านาฬิกาแบบเรียกซ้ำทุกครั้งที่วนรอบซึ่งอาจมีราคาแพง inotifywait ... | while read line ...
ถ้าคุณไม่สามารถใช้ทุบตีคุณสามารถสั่งท่อเข้าไปในห่วงแทน: inotifywait
สร้างเอาต์พุตหนึ่งบรรทัดสำหรับแต่ละเหตุการณ์ในโหมดนี้ดังนั้นลูปจะรันหนึ่งครั้งสำหรับแต่ละเหตุการณ์