inotifywait -m
"मॉनिटर" मोड है : यह कभी भी बाहर नहीं निकलता है। शेल इसे चलाता है और निकास कोड का इंतजार करता है ताकि पता चल सके कि लूप के शरीर को चलाना है, लेकिन यह कभी नहीं आता है।
यदि आप निकालते हैं -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
इस मोड में प्रत्येक ईवेंट के लिए आउटपुट की एक पंक्ति बनाता है, इसलिए लूप प्रत्येक के लिए एक बार चलता है।