Una opción sería simplemente usar launchd. Guarde una lista de propiedades como esta ~/Library/LaunchAgents/com.superuser.445907.plist
, y cárguela con launchctl load ~/Library/LaunchAgents/com.superuser.445907.plist
o al cerrar sesión y volver a iniciarla.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd>
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.superuser.445907</string>
<key>Program</key>
<string>/Users/username/script</string> <!-- ~/ doesn't work -->
<key>WatchPaths</key>
<array>
<string>/Users/username/Folder/</string>
</array>
<key>ThrotteInterval</key>
<integer>0</integer> <!-- run at most every 0 seconds, by default 10 -->
</dict>
</plist>
Lanzado solo registra los cambios en los archivos cuando se guardan atómicamente, o se eliminan y recrean cada vez que se guardan. La mayoría de las aplicaciones de OS X realizan guardados atómicos de forma predeterminada, pero por ejemplo TextMate y vim no lo hacen. No se detectan cambios en las subcarpetas de las carpetas observadas.
launchctl unload $path && launchctl load $path
aplica cambios a un plist.
Ver man launchd
y man launchd.plist
para más información.