Funziona manualmente
Ho uno script di bash chiamato git-watch.sh (collegamento di prova) che chiama fswatch
in un ciclo come questo:
while read -r line; do
{
fswatch -r "$line" | grep --line-buffered -v '.git' | xargs -n1 -I{} git-commit-unattended.sh "$line";
} &
done
(Nota ampersand
. Dovevo usarlo perché fswatch
blocca in attesa di modifica, quindi while
non supererebbe la prima iterazione altrimenti potrebbe interferire con launchd
, non certo.)
Funziona bene se lo chiamo dalla riga di comando passandogli un file, come
git-watch.sh < /Users/kbdluv/Dropbox/dotfiles/git-watch-paths.txt
Percentuale di rendimento di ps aux | grep fswatch
:
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
Che è ciò che vogliamo.
Launchd non fa
Ma ora voglio che si avvii automaticamente all'accesso e non sono stato in grado di ottenere launchd
per cooperare.
Ecco il mio com.user.gitWatchMyPathsOnLogin.plist
finora :
<?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>
Carica senza errori. Si inizia senza emettere alcun output su stderr o stdout, ma ecco cosa mi offre ps aux | grep fswatch
:
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
Esegue fswatch
solo con la riga ultima nel file git-watch-paths.txt
. (Manca il fswatch
per dotfiles
.)
E non esegue il commit automatico quando si verifica una modifica, quindi suppongo che le parti fswatch
in fase di piping non vengano richiamate.
Che cosa sto sbagliando, o come potrei eseguire il debug ulteriormente quando launchd
non sta generando alcun errore o non sta emettendo nulla?