2011-09-07 5 views
1

Windows 7 컴퓨터에서 cygwin에서 실행되는 루비 스크립트 내에서 growlnotify를 호출하는 데 문제가 있습니다. 나는 이것이 가능하다고 생각하지만, 너무 많은 해석 계층이 일어나고 올바른 이스케이프 시퀀스가 ​​무엇인지 알아낼 수 없다. 루비 내부에서 cygwin 내부에서 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

system의 다중 인수 형식을 사용하면 쉘을 우회하여 이스케이프 처리하는 레이어 하나가 제거됩니다. 이런 식으로 뭔가 :

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

윈도우는 일반적으로 앞으로 수락하거나 역 슬래시는 그래서 청소 당신의 /i가 해당 경로처럼하지 않는 경우 \\로 돌아가, 조금 전환합니다.

단일 인수 system은 거의 항상 발생하는 대기중인 버그이며, 다른 방법이 없다면 사용하지 않을 것입니다. (더 나은 방법 ATM이 없을 때를 생각할 수 없습니다) .

+0

아! 너무 깔끔하고 매력처럼 작동합니다. 정말 고마워! – Denis

+0

@Denis : 그래, 모든 탈출 이스케이프 다소보기 흉한 :) –

관련 문제