Вручную это работает
У меня есть скрипт 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
не выдает никакой ошибки или ничего не выводит?
источник