Может ли Mingw32/Msys запускать исполняемые файлы dos/cmd.exe, не портя аргументы?

Может ли Mingw32/Msys запускать исполняемые файлы dos/cmd.exe, не портя аргументы?

Я пытаюсь запустить growlnotify.exe из командной строки Windows bash. Перекомпиляция для 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'

Это отправит уведомление с 'сообщение идет сюда', но как будто я не потрудился включить первые два аргумента. Однако одинарные или двойные слеши никогда не отправляют уведомление (как будто я вообще не включил никаких аргументов).

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

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

решение1

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

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

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

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

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

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

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

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

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

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

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

решение2

Пробовали ли вы запустить «cmd.exe /c growlnotify.exe ...» из MinGW?

Связанный контент