我無法inotifywait正確使用。
我的環境是帶有 i7-9700 的 CentOS 8 Stream
test.sh
#!/bin/bash
inotifywait -e modify ./test.txt |
while read dirname eventlist filename
do
echo "Event catch!"
done
echo "I am doing next thing"
output in terminal(stdout)
[root@ceph examples]# sh test.sh
Setting up watches.
Watches established.
I am doing next thing
我期待什么?
我希望我的腳本列印“事件捕獲!”這一行。如您所見,我的 bash 腳本忽略了所有 while 回圈塊,只列印“我正在做下一件事”。
uj5u.com熱心網友回復:
的正常行為inotifywait是在捕獲事件后退出。
如果要inotifywait繼續監視事件,則必須使用-m選項開關。
同樣在您的腳本中,您從輸出中讀取 3 個引數 ifinotifywait而如果它只有一個事件,則可能只回傳 2 個。您可以使用該--format選項來保持可預測的輸出格式。
#!/bin/sh
inotifywait -m -e modify ./test.txt |
while read -r filename eventlist
do
printf 'Event catch!\nfilename=%s, eventlist=%s\n' "$filename" "$eventlist"
done
printf %s\\n "I am doing next thing"
如果要退出inotifywait,只需從管道中終止父行程。
例子:
#!/bin/sh
max_events=2
inotifywait -m -e modify ./test.txt |
while read -r filename eventlist
do
printf 'Event catch!\nfilename=%s, eventlist=%s\n' "$filename" "$eventlist"
max_events=$((max_events - 1))
[ 0 -eq "$max_events" ] && kill $$
done
printf %s\\n "I am doing next thing"
現在使用 Bash 陣列來處理事件并讀取受控格式:
#!/bin/bash
max_events=2
while
# Reads file name
read -r -d '' filename &&
# and reads event list in an array
read -r -a eventlist
do
declare -p filename eventlist
printf 'Event catch!\nfilename! %s\neventlist: %s\n' "$filename" \
"${eventlist[*]}"
((--max_events)) || break
done < <(
inotifywait --format '%w%0%e' --monitor --event MODIFY ./test.txt
)
printf %s\\n "I am doing next thing"
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/495800.html
上一篇:直方圖顯示不正確
