Cómo comenzar con launchd un script bash que llama a fswatch con '&'

0

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?

    
pregunta kbdluv 09.01.2018 - 00:04

1 respuesta

0

¿Qué sucede si modifica git-watch.sh para usar el comando "esperar" para esperar en los procesos en segundo plano?

while read -r line; do
  {
    fswatch -r "$line" | grep --line-buffered -v '.git' | xargs -n1 -I{} git-commit-unattended.sh "$line";
  } &
done

wait
    
respondido por el thrig 09.01.2018 - 17:36

Lea otras preguntas en las etiquetas