Manuellement, cela fonctionne
J'ai un bash script appelé git-watch.sh (lien gist) qui appelle fswatch
dans une boucle comme celle-ci :
while read -r line; do
{
fswatch -r "$line" | grep --line-buffered -v '.git' | xargs -n1 -I{} git-commit-unattended.sh "$line";
} &
done
(Notez le ampersand
. J'ai dû l'utiliser parce que fswatch
blocs en attente de changement, de sorte que le while
ne passerait pas la première itération sinon. Cela pourrait interférer avec launchd
mais je ne suis pas sûr).
Il fonctionne bien si je l'appelle depuis la ligne de commande en lui passant un fichier, par exemple
git-watch.sh < /Users/kbdluv/Dropbox/dotfiles/git-watch-paths.txt
Running ps aux | grep fswatch
rendements :
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
C'est ce que nous voulons.
Launchd n'a pas
Mais maintenant, je veux qu'il démarre automatiquement à la connexion, et je n'ai pas réussi à obtenir launchd
de coopérer.
Voici mon com.user.gitWatchMyPathsOnLogin.plist
jusqu'à présent :
<?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>
Il se charge sans erreur. Il démarre sans rien sortir sur stderr ou stdout non plus, mais voici ce qu'il en est ps aux | grep fswatch
me donne :
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
Il fonctionne fswatch
uniquement avec le dernier dans le git-watch-paths.txt
fichier. (Le fswatch
pour dotfiles
est manquant).
Et il n'y a pas d'auto-commitabilité quand un changement se produit, donc je suppose que les parties fswatch
ne sont pas appelés.
Qu'est-ce que je fais mal, ou comment pourrais-je déboguer davantage lorsque launchd
n'envoie pas d'erreur ou ne produit rien ?