Может ли Mingw32/Msys запускать исполняемые файлы dos/cmd.exe, не облажаясь с аргументами?
Я пытаюсь запустить 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 ответа
Хорошо, правильный ответ следует.
Чтобы избежать таких аргументов, что можно использовать исполняемые файлы 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"
Надеюсь, это поможет кому-то в будущем.
Вы пытались запустить "cmd.exe /c growlnotify.exe ..." из MinGW?