Manualmente funciona
Tengo un guión de bash llamado git-watch.sh (enlace de la esencia) que llama a fswatch
en un bucle como este:
while read -r line; do
{
fswatch -r "$line" | grep --line-buffered -v '.git' | xargs -n1 -I{} git-commit-unattended.sh "$line";
} &
done
(Tenga en cuenta el ampersand
. Tenía que usarlo porque fswatch
bloquea el cambio, por lo que while
no pasaría la primera iteración de lo contrario. De lo contrario, podría estar interfiriendo con launchd
, no seguro.)
Funciona bien si lo llamo desde la línea de comandos pasándole un archivo, como
git-watch.sh < /Users/kbdluv/Dropbox/dotfiles/git-watch-paths.txt
Ejecución de ps aux | grep fswatch
rendimientos:
kbdluv 9629 0.0 0.0 4278008 920 s001 S+ 5:46PM 0:00.00 grep fswatch
kbdluv 9415 0.0 0.0 4299876 4912 s001 S 5:37PM 0:00.01 fswatch -r /Users/kbdluv/Dropbox/org
kbdluv 9414 0.0 0.0 4315736 4944 s001 S 5:37PM 0:00.01 fswatch -r /Users/kbdluv/Dropbox/dotfiles
Que es lo que queremos.
Launchd no
Pero ahora quiero que se inicie automáticamente al iniciar sesión, y no he podido obtener launchd
para cooperar.
Aquí está mi com.user.gitWatchMyPathsOnLogin.plist
tan lejos :
<?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.user.gitWatchMyPathsOnLogin</string>
<key>ProgramArguments</key>
<array><string>/Users/kbdluv/Dropbox/dotfiles/scripts/git-watch-my-paths-on-login.sh</string></array>
<key>RunAtLoad</key>
<true/>
<key>StandardOutPath</key>
<string>/tmp/com.user.gitWatchMyPathsOnLogin.out</string>
<key>StandardErrorPath</key>
<string>/tmp/com.user.gitWatchMyPathsOnLogin.err</string>
</dict>
</plist>
Se carga sin error. Empieza sin entregar nada a stderr o stdout tampoco, pero esto es lo que ps aux | grep fswatch
me da:
kbdluv 11550 0.0 0.0 4267768 888 s001 S+ 7:56PM 0:00.00 grep fswatch
kbdluv 11545 0.0 0.0 4298088 4932 ?? S 7:56PM 0:00.01 fswatch -r /Users/kbdluv/Dropbox/org
Se ejecuta fswatch
solo con la línea última en el archivo git-watch-paths.txt
. (Falta el fswatch
para dotfiles
.)
Y no se compromete automáticamente cuando ocurre un cambio, así que supongo que las partes fswatch
se están canalizando para que no se las llame.
¿Qué estoy haciendo mal, o cómo podría depurar esto aún más cuando launchd
no está generando ningún error o generando nada?