1

我在 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}\\

有任何想法吗?

4

1 回答 1

1

试试 的多参数形式system,这将通过绕过外壳来消除一层转义。像这样的东西:

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)。

于 2011-09-07T23:28:24.700 回答