6

Я пытаюсь запустить growlnotify.exe из командной строки Windows. Перекомпилировать его для mingw32 не очень хороший вариант для меня.

Growlnotify работает, если я использую его из командной строки cmd, но он не работает (в основном) из командной строки bash. Кажется, что он может принимать только один аргумент, без аргумента (который является уведомительным сообщением). Если есть более одного аргумента, он молча терпит неудачу. Если есть один переключатель и нет других аргументов, этот переключатель отправляется как сообщение.

Мне удалось найти несколько подсказок в Google о том, что это как-то связано с тем, что Windows не предоставляет настоящие tty, но не исправляет их. Есть ли какой-нибудь умный способ заставить это работать? Какой-нибудь способ избежать аргументов правильно, чтобы он вел себя как ожидалось?

Новая информация:

Если я запускаю его с тройной косой чертой, аргументы игнорируются. Принимая во внимание, что если я запускаю его с тем, что является правильным форматом в DOS, он молча терпит неудачу.

Ошибка (также не выполняется, если я использую //):

growlnotify /a:'Application Name' /n:'Notification Type' 'message goes here'

Но это:

growlnotify ///a:'Application Name' ///n:'Notification Type' 'message goes here'

Тот отправит уведомление с сообщением «здесь идет», но я как бы не потрудился включить первые два аргумента. Одиночная или двойная косая черта, однако, она никогда не отправляет уведомление (как будто я вообще не включил аргументы).

Четырехкратные и пятикратные косые черты ведут себя так же, как тройные косые черты.

Объяснение различных переключателей.

2 ответа2

9

Хорошо, правильный ответ следует.

Чтобы избежать таких аргументов, что можно использовать исполняемые файлы dos, вы удваиваете косую черту, например:

growlnotify //a:Application //t:Title "message here"

Причина, по которой он потерпит неудачу, заключалась в том, что я почему-то не использовал то же имя приложения, которое было у меня при запуске днем ранее (и как другое приложение оно было незарегистрировано, а Growl For Windows игнорирует незарегистрированные уведомления).

Есть несколько других приемов, которые стоит упомянуть. В CMD вы можете выполнить инструкцию следующим образом:

growlnotify //a:App //t:"With Spaces" "message here"

Бомбы "С пробелами". Я думаю, что msys/bash может расширять кавычки, а затем передавать их так, что исполняемый файл видит два аргумента, //t:With и Spaces ". Правильный способ сделать это выглядит так:

growlnotify //a:App //t:With\ Spaces "message here"

Кроме того, если вы передадите какой-либо путь к файлу, вы все равно захотите использовать стиль DOS, что означает косую черту (поскольку в конечном счете это будет исполняемый файл, подобный DOS). Но они будут интерпретированы как побеги, что означает, что их также нужно удвоить.

growlnotify //a:App //ai:C:\\path\\to\\icon.png "message here"

Надеюсь, это поможет кому-то в будущем.

4

Вы пытались запустить "cmd.exe /c growlnotify.exe ..." из MinGW?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .