Manualmente funciona
Tengo un script de bash llamado git-watch.sh (gist enlace) 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
(Nota de la ampersand
. Tuve que usar porque fswatch
bloques de espera para el cambio, por lo que el while
no pasar de la primera iteración de otra manera. Podría estar interfiriendo con launchd
, aunque, no estoy seguro.)
Funciona bien si me llaman desde la línea de comandos pasar un archivo, como
git-watch.sh < /Users/kbdluv/Dropbox/dotfiles/git-watch-paths.txt
Ejecución 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 en el inicio de sesión, y no he sido capaz de conseguir launchd
a cooperar.
Aquí está mi com.user.gitWatchMyPathsOnLogin.plist
hasta el momento:
<?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>
Carga sin error. Se inicia sin producir nada a stderr o stdout, pero aquí es lo 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
sólo con la última línea en la git-watch-paths.txt
archivo. ( fswatch
Para dotfiles
falta.)
Y no auto-commit cuando sucede un cambio, así que supongo que las partes fswatch
se canaliza a no recibir llamadas.
¿Qué estoy haciendo mal, o cómo podría yo depuración de esto, aún más, cuando launchd
no tirar ningún error o la salida de cualquier cosa?