0
或者:如何防止sudo'ed rsync在while循環中無限觸發? 因爲這是兩個(感覺)發生,我不明白。爲什麼在while循環中使用時,sudo會將阻塞命令更改爲非阻塞命令?
我想設置一個手錶同步修改的文件,它工作正常。但是,一旦我將所需的sudo
引入到rsync
命令中,單個inotify
事件將導致rsync
命令無限期激發。
#!/usr/bin/env bash
inotifywait -m -r --format '%w%f' -e modify -e move -e create -e delete /var/test | while read line; do
sudo rsync -ah --del --progress --stats --update "$line" "/home/test/"
done
當您編輯文件時,rsync
進入快速啓動模式。但是丟失sudo
(並且使用您有權訪問的文件夾),並且該腳本按預期工作。
- 這是爲什麼?
- 如何使
sudo
命令正確工作?
當您應用sudo的,我懷疑rsync的等待密碼輸入。這就是你認爲rsync無限期運行的原因。你嘗試過,在命令提示符下運行sudo'ed rsync作爲獨立命令嗎?它要求輸入密碼嗎?如果是,您可能想使用expect命令來自動輸入密碼。 – Icarus3
該命令工作正常,沒有密碼 - 我'rsync'允許'sudoers'與'nopassword'。該命令也可以正確執行,並同步文件。但它一直在做,直到我打破劇本。 – Redsandro
啊!有你的問題!當編輯任何文件時,大部分編輯器都會創建交換文件,甚至更新時間戳。這會發出許多修改通知給「inotifywait」,您應該傳遞「-e close_write」切換到inotifywait命令。實際上,只是不要尋找修改。見,http://stackoverflow.com/questions/10300835/too-many-inotify-events-while-editing-in-vim – Icarus3