从ruby里面的cygwin里面调用growlnotify

时间:2011-09-07 23:11:29

标签: ruby cygwin growl

我在Windows 7计算机上运行在cygwin上的ruby脚本中调用growlnotify时遇到了一些麻烦。我怀疑这是可行的但是有太多的解释层发生了,我无法弄清楚正确的逃逸序列需要是什么。

以下代码(未指定自定义图标)工作正常:

#!/usr/bin/ruby

l = "Hello World"

system("/cygdrive/c/Program\\ Files\\ \\(x86\\)/Growl\\ for\\ Windows/growlnotify /t:testedfa  \'#{l}\'")

但是,当我尝试指定图标时,事情开始失败。根据我尝试的转义字符层数,命令将根本不执行任何操作,或者growlnotify将崩溃。特别是下面显示的代码,我根本得不到Growl的回复。

#!/usr/bin/ruby

l = "Hello World"

system("/cygdrive/c/Program\\ Files\\ \\(x86\\)/Growl\\ for\\ Windows/growlnotify /t:testedfa /i:C:\\\workspace\\\tryCPUnit\\\amp\\\testedfa\\\pass.png \\\'#{l}\\

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

尝试system的多参数形式,它将绕过shell删除一层转义。像这样:

system(
    '/cygdrive/c/Program Files (x86)/Growl for Windows/growlnotify',
    '/t:testedfa',
    '/i:C:/workspace/tryCPUnit/amp/testedfa/pass.png',
    l
)

Windows通常接受正斜杠或反斜杠,因此我稍微清理了/i开关,如果它不喜欢该路径,请返回\\

使用单个参数system几乎总是只是一个等待发生的错误,我不会使用它,除非没有别的办法(我想不出什么时候会有更好的方式ATM)。