вызывая рычаг уведомления изнутри cygwin изнутри ruby - PullRequest
1 голос
/ 08 сентября 2011

У меня возникли проблемы с вызовом growlnotify из сценария ruby, запущенного на cygwin на компьютере с Windows 7.Я подозреваю, что это выполнимо, но происходит слишком много уровней интерпретации, и я не могу понять, какой должна быть правильная escape-последовательность.

Следующий код (без указания пользовательского значка) работаетхорошо:

#!/usr/bin/ruby

l = "Hello World"

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

Однако, когда я пытаюсь указать значок, вещи начинают терпеть неудачу.В зависимости от того, сколько слоев escape-символов я пробую, команда либо вообще ничего не сделает, либо 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 Ответ

1 голос
/ 08 сентября 2011

Попробуйте использовать форму с несколькими аргументами 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 ).

...