Как начать с запуска bash-скрипта, который вызывает fswatch с `&`

0

Вручную это работает

У меня есть скрипт bash git-watch.sh (главная ссылка), которая вызывает fswatch в цикле, как это:

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

(Обратите внимание ampersand, Я должен был использовать это, потому что fswatch блоки ждут перемен, поэтому while иначе не прошел бы первую итерацию. Это может мешать launchd хотя, не уверен.)

Он работает нормально, если я вызываю его из командной строки, передавая ему файл, например

git-watch.sh < /Users/kbdluv/Dropbox/dotfiles/git-watch-paths.txt

Бег 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

Что мы и хотим.


Launchd не

Но теперь я хочу, чтобы он автоматически запускался при входе в систему, и я не смог launchd кооперироваться.

Вот мой com.user.gitWatchMyPathsOnLogin.plist до сих пор :

<?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>

Загружается без ошибок. Он начинается без вывода чего-либо в stderr или stdout, но вот что 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

Работает fswatch только с прошлой линия в git-watch-paths.txt файл. (The fswatch за dotfiles пропал, отсутствует.)

И это не автоматически фиксируется, когда происходит изменение, поэтому я думаю, что части fswatch идет по трубопроводу, не получают вызова.


Что я делаю не так, или как я могу отладить это дальше, когда launchd не выдает никакой ошибки или ничего не выводит?

kbdluv
источник

Ответы:

1

Что произойдет, если вы исправите git-watch.sh использовать команду «ждать» для ожидания на фоновых процессах?

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

wait
thrig
источник