La visione di un file per le modifiche può essere eseguita con un LaunchAgent. Ad esempio, crea un file plist in ~/Library/LaunchAgents/watch.and.lol.plist
e inseriscilo con questo contenuto:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>watch.and.lol</string>
<key>ProgramArguments</key>
<array>
<string>/Users/Shared/changeAction.sh</string>
<string>-force</string>
</array>
<key>WatchPaths</key>
<array>
<string>/private/var/radmind/client/.radmindOnDemand</string>
</array>
</dict>
</plist>
Ora assicurati che il file /private/var/radmind/client/.radmindOnDemand
esista. Quindi carica il launchagent con il comando $ launchctl load ~/Library/LaunchAgents/watch.and.lol.plist
. Non appena il file ~/Library/LaunchAgents/watch.and.lol.plist
non esiste più, questo lavoro launchagent verrà scaricato.
Ora scrivi alcuni script di shell che guardano il tuo file alla ricerca di modifiche, come:
chsum1=""
while [[ true ]]
do
chsum2='md5 /private/var/radmind/client/.radmindOnDemand'
if [[ $chsum1 != $chsum2 ]] ; then
compile
chsum1='md5 /private/var/radmind/client/.radmindOnDemand'
fi
sleep 2
done
Nota: questo script di shell richiede un lavoro extra da fare per renderlo efficiente. Ora esegue il polling ogni 2 secondi ( sleep 2
). È meglio uscire dallo script dopo l'esecuzione del comando compile
. Ciò richiede la memorizzazione dell'output del comando hash md5 che può sopravvivere all'uscita e al relauch di questo script di shell.