inotifywait -m
là chế độ "màn hình" : nó không bao giờ thoát. Shell chạy nó và chờ mã thoát để biết có nên chạy phần thân của vòng lặp hay không, nhưng điều đó không bao giờ đến.
Nếu bạn loại bỏ -m
, nó sẽ hoạt động:
while inotifywait -r -e close_write "/root/secondfolder/"
do
echo "close_write"
done
sản xuất
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.
...
Theo mặc định, inotifywait sẽ "thoát sau khi sự kiện đầu tiên xảy ra", đó là những gì bạn muốn trong một điều kiện vòng lặp.
Thay vào đó, bạn có thể thích đọc đầu ra tiêu chuẩn của inotifywait
:
#!/bin/bash
while read line
do
echo "close_write: $line"
done < <(inotifywait -mr -e close_write "/tmp/test/")
Kịch bản (bash) này sẽ đọc từng dòng đầu ra của inotifywait
lệnh vào $line
biến bên trong vòng lặp, sử dụng thay thế quy trình . Nó tránh thiết lập đồng hồ đệ quy mỗi lần xung quanh vòng lặp, có thể tốn kém. Nếu bạn không thể sử dụng bash, bạn có thể chuyển lệnh vào vòng lặp : inotifywait ... | while read line ...
. inotifywait
tạo một dòng đầu ra cho mỗi sự kiện trong chế độ này, vì vậy vòng lặp chạy một lần cho mỗi sự kiện.