我有一个使用growlnotify发送通知的bash脚本。然而,如果Growl没有运行,growlnotify就无法工作,并且它也不会自动启动需要的Growl。因此,我希望能够检查Growl是否正在运行,如果没有运行,则启动它。
我考虑做以下操作:
g=$(ps -e | grep Growl | grep -v grep)
if [ -z "$g" ] # Growl isn't running
then
# (start Growl)
fi
如何通过命令行启动Growl?
我有一个使用growlnotify发送通知的bash脚本。然而,如果Growl没有运行,growlnotify就无法工作,并且它也不会自动启动需要的Growl。因此,我希望能够检查Growl是否正在运行,如果没有运行,则启动它。
我考虑做以下操作:
g=$(ps -e | grep Growl | grep -v grep)
if [ -z "$g" ] # Growl isn't running
then
# (start Growl)
fi
通常情况下,Growl安装程序会确保进行安装的用户获得一个登录启动项,该启动项会启动GrowlHelperApp.app
,即Growl的通知守护进程。该应用程序内置于Growl PreferencePane中,因此无法保证其位置;它可能位于/Library/PreferencePanes
或~/Library/PreferencePanes
中,这取决于Growl的安装方式。如果您觉得不能信任用户做正确的事情,可以使用其捆绑标识符以位置无关的方式从命令行手动启动辅助应用程序。
open -b com.Growl.GrowlHelperApp
open -b com.Growl.GrowlHelperApp
,growlnotify -m "test"
。这会导致出现“无法找到本地GrowlApplicationBridgePathway,退回到NSDNC”的错误。如果我这样做:停止Growl,启动Growl,growlnotify -m "test"
它就能正常工作。显然,停止Growl,growlnotify -m "test"
也会产生错误。 - nightfireopen -b com.Growl.GrowlHelperApp
没有启动运行Growl所需的所有进程,而“启动Growl”按钮会执行这个操作。 - nightfirepgrep growlnotify || growlnotify <options> &
growlctl
。用它来启动/停止。至于命令,你可以尝试使用 growl
而不是 Growl
进行匹配(或者给 grep
加上 -i 参数)。 - ghostdog74
if ! ps -e | grep [G]rowl > /dev/null 2>&1
- Dennis Williamsonif ! ps -e | grep [Gg]rowl > /dev/null 2>&1
吗?无论如何,我们要查找的进程名称中始终包含 Growl.GrowlHelperApp,因此您可以直接使用大写的 Growl 进行 grep。 - nightfireps
的grep -v
命令。 - Dennis Williamson