2010-04-02 3 views
10

У меня есть скрипт bash, который использует growlnotify для отправки уведомлений. Тем не менее, growlnotify не работает, если Growl еще не запущен, и он не будет автоматически запускать Growl, если он ему нужен. Поэтому я хочу проверить, работает ли Growl, а затем запустить его, если это не так.
Я имею в виду сделать что-то вроде:Как начать рычание через командную строку

g=$(ps -e | grep Growl | grep -v grep) 
if [ -z "$g" ] # Growl isn't running 
then 
# (start Growl) 
fi 

Как бы я начать Growl с помощью командной строки?

+0

Вы можете сократить ваш первый две строки: 'if! ps -e | grep [G] rowl>/dev/null 2> & 1' –

+0

спасибо. но вы имели в виду «если! ps -e | grep [Gg] rowl>/dev/null 2> & 1'? во всяком случае, процесс, который мы ищем, всегда будет иметь Growl.GrowlHelperApp в имени, поэтому вы можете просто grep для верхнего регистра Growl. – anoda9

+0

Нет, я не хотел проверять любой случай, так как я знал, что процесс, который вы ищете, начинается с капитала G. Выполнение этого так, как я показал, - это трюк, чтобы избежать необходимости выполнять 'grep -v' с' ps'. –

ответ

11

Обычно установщик Growl будет гарантировать, что пользователь установки в устройство получает предмет запуска входа, который запускает , уведомление демон для Growl. Приложение встроено в панель предпочтений Growl, поэтому вы не можете гарантировать, где она будет расположена; он может быть в /Library/PreferencePanes или ~/Library/PreferencePanes, в зависимости от того, как был установлен Growl. Если вы чувствуете, что вы не можете доверять пользователю делать правильные вещи, вы можете вручную запустить вспомогательную программу из командной строки в месте-независимым способом, используя его расслоение идентификатор:

open -b com.Growl.GrowlHelperApp 
+0

Спасибо! это именно то, что я искал. – anoda9

+0

Ну, это почти работает. Если впоследствии вы заглянете в область настроек системы, то скажет, что Growl работает, вероятно, потому, что он проверяет GrowlHelperApp в процессах. Но если вы попытаетесь использовать growlnotify, вы получите сообщение об ошибке: «не удалось найти локальный GrowlApplicationBridgePathway, возвращаясь к NSDNC» – anoda9

+0

Работает для меня. Вероятно, это не сработает, если пользователь не подключен к серверу окон. И это с Growl 1.2 на OS X 10.6.3. Нет гарантий, что он будет работать с любой другой комбинацией или что он не сломается. Суть: если пользователь хочет использовать Growl для получения уведомлений, пользователю необходимо установить Growl как задокументированное. –

0
pgrep growlnotify || growlnotify <options> & 
+1

Нет, это не то, о чем я прошу. Я хочу проверить, работает ли Growl, а не growlnotify. И если это не так, я хочу начать Growl, а не отправлять сообщение с growlnotify. – anoda9

+0

Посмотрите, есть ли у вас 'growlctl'. используйте это для начала/остановки. Что касается команды, вы можете попробовать grepping для 'growl' вместо' Growl' (или дать -i для 'grep') – ghostdog74

+2

growlctl был прекращен после версии Growl 0.7.6, а текущая версия Growl 1.2 ... Кроме того, он был скомпилирован для PowerPC, поэтому вам нужно загрузить программное обеспечение Rosetta, чтобы использовать его на Mac Mac. Я мог бы загрузить сценарий и установить Rosetta, а также загрузить старую версию Growl, чтобы получить growlctl, но я хотел бы сделать все как можно проще. Не существует ли простого способа запустить такой процесс, как Growl из командной строки? – anoda9

 Смежные вопросы

  • Нет связанных вопросов^_^