如何通过命令行启动Growl

10

我有一个使用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?

你可以把前两行简化为:if ! ps -e | grep [G]rowl > /dev/null 2>&1 - Dennis Williamson
谢谢。但是你的意思是 if ! ps -e | grep [Gg]rowl > /dev/null 2>&1 吗?无论如何,我们要查找的进程名称中始终包含 Growl.GrowlHelperApp,因此您可以直接使用大写的 Growl 进行 grep。 - nightfire
不,我并不是想检查两种情况,因为我知道你要找的进程名以大写字母G开头。我展示的方法是一个技巧,可以避免使用psgrep -v命令。 - Dennis Williamson
2个回答

11

通常情况下,Growl安装程序会确保进行安装的用户获得一个登录启动项,该启动项会启动GrowlHelperApp.app,即Growl的通知守护进程。该应用程序内置于Growl PreferencePane中,因此无法保证其位置;它可能位于/Library/PreferencePanes~/Library/PreferencePanes中,这取决于Growl的安装方式。如果您觉得不能信任用户做正确的事情,可以使用其捆绑标识符以位置无关的方式从命令行手动启动辅助应用程序。

open -b com.Growl.GrowlHelperApp

嗯,那几乎可以工作。如果之后查看系统偏好设置面板,它会显示Growl正在运行,这可能是因为它在进程中检查GrowlHelperApp。但是,如果您尝试使用growlnotify,则会出现错误:“找不到本地GrowlApplicationBridgePathway,退回到NSDNC”。 - nightfire
对我来说可以用。如果用户没有连接到窗口服务器,这可能不起作用。这是在OS X 10.6.3上使用Growl 1.2的情况。不能保证它会与任何其他组合一起工作或者它不会出现故障。总之:如果用户想使用Growl接收通知,则用户需要按照文档安装Growl。 - Ned Deily
3
真的吗?我也在使用10.6.3,Growl 1.2,但它对我来说不起作用。这是我的步骤:点击“停止Growl”按钮,然后执行open -b com.Growl.GrowlHelperAppgrowlnotify -m "test"。这会导致出现“无法找到本地GrowlApplicationBridgePathway,退回到NSDNC”的错误。如果我这样做:停止Growl,启动Growl,growlnotify -m "test"它就能正常工作。显然,停止Growl,growlnotify -m "test"也会产生错误。 - nightfire
3
我不确定是否是Growl安装的问题,因为那很简单。似乎更多的是open -b com.Growl.GrowlHelperApp没有启动运行Growl所需的所有进程,而“启动Growl”按钮会执行这个操作。 - nightfire
好吧,这是一个hack。除非我误解了你的意图,否则似乎你正在试图违背Growl的设计理念。Growl将用户通知置于用户控制之下。如果用户选择不运行Growl,则应用程序不应该尝试为他们启动它。或者你还有其他目标吗? - Ned Deily
如果用户选择不运行Growl,那么应用程序就不应该尝试为他们启动它。是的,我想这是正确的。大多数情况下,我在寻找一种确保Growl正在运行的方法,因为我的脚本依赖于它。现在,我想我只能让终端运行一个脚本,向用户显示一条消息,告诉他们打开Growl(如果它没有运行)。这也是一个hack,但是很有效。 - nightfire

0
pgrep growlnotify || growlnotify <options> &

1
不,那不是我要问的。我想检查Growl是否在运行,而不是growlnotify。如果没有运行,我想启动Growl,而不是使用growlnotify发送消息。 - nightfire
看看你有没有 growlctl。用它来启动/停止。至于命令,你可以尝试使用 growl 而不是 Growl 进行匹配(或者给 grep 加上 -i 参数)。 - ghostdog74
2
growlctl在Growl版本0.7.6之后已经停止使用,当前的Growl版本是1.2。此外,它是为PowerPC编译的,因此您必须下载Rosetta软件才能在Intel Mac上使用它。我可以让脚本下载和安装Rosetta,并下载旧版本的Growl以获取growlctl,但我希望尽可能简单地完成任务。难道没有一种简单的方法从命令行启动像Growl这样的进程吗? - nightfire

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接