2011-09-07 78 views
1

我在運行在Windows 7機器上的cygwin上的ruby腳本中調用growlnotify時遇到了一些麻煩。我懷疑這是可行的,但是有太多層次的解釋發生,我無法弄清楚正確的轉義序列應該是什麼。然而從裏面的cygwin從ruby裏面調用growlnotify

#!/usr/bin/ruby 

l = "Hello World" 

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

,當我嘗試指定一個圖標,事情開始失敗:

下面的代碼(沒有指定自定義圖標)工作正常。根據我嘗試的轉義字符層數,命令根本不會執行任何操作,或者growlnotify會崩潰。具體的代碼如下所示,我根本沒有收到咆哮的迴應。

#!/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

嘗試使用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幾乎總是隻是一個等待發生的錯誤,除非沒有其他方式,否則我不會使用它(並且我不知道什麼時候沒有更好的方法) 。

+0

啊!非常乾淨,它像一個魅力。非常感謝! – Denis

+0

@Denis:是的,所有逃脫的逃生都有些難看:) –