我在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}\\
有什么想法吗?
答案 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)。