O Mingw32 / Msys pode executar executáveis dos / cmd.exe sem estragar os argumentos?

6

Estou tentando executar o growlnotify.exe em um prompt bash do Windows. Recompilá-lo para o mingw32 não é uma boa opção para mim.

o growlnotify funciona se eu usá-lo no prompt do cmd, mas ele falha (principalmente) no prompt do bash. Parece apenas ser capaz de aceitar um único argumento, um sem um switch (que é a mensagem de notificação). Se houver mais de um argumento, ele falhará silenciosamente. Se houver um único switch e nenhum outro argumento, esse switch será enviado como mensagem.

Eu consegui descobrir algumas dicas no Google que tem algo a ver com a maneira como o Windows não fornece um verdadeiro tty, mas sem correções. Existe alguma maneira inteligente de forçar isso a funcionar? Alguma maneira de escapar dos argumentos corretamente de forma que se comporte como esperado?

Novas informações:

Se eu o executar com barras triplas, os argumentos serão ignorados. Considerando que, se eu correr com o que é o formato correto no DOS, ele falha silenciosamente.

Falha (também falha se eu usar //):

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

Mas isso:

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

Esse enviará avisos com a mensagem 'vai aqui', mas como se eu não tivesse me incomodado em incluir os dois primeiros argumentos. Barras simples ou duplas, porém, nunca envia um aviso (como se eu não incluísse nenhum argumento).

Barras quádruplas e quíntuplos se comportam da mesma forma que barras triplas.

Explicação das várias opções .

    
por John O 27.02.2013 / 23:29

2 respostas

9

Ok, a resposta correta segue.

Para escapar dos argumentos de que os executáveis podem ser usados, você duplica as barras, como:

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

O motivo de falhar para mim foi porque, de alguma forma, eu não estava usando o mesmo nome de aplicativo que tinha quando comecei no dia anterior (e como um aplicativo diferente não foi registrado, o Growl For Windows ignora as notificações não registradas).

Existem alguns outros truques que vale a pena mencionar. No CMD, você pode emitir a declaração assim:

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

As bombas "Com Espaços". Eu acho que o msys / bash pode estar expandindo as aspas, e então passando para dentro, de tal forma que o executável veja dois argumentos, // t: Com e Espaços ". O correto maneira de fazer isso parece ser:

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

Além disso, se você passar em qualquer caminho de arquivo, você ainda vai querer usar o estilo DOS, o que significa barras (já que, em última análise, é o executável do tipo DOS que irá consumir isso). Mas esses serão interpretados como escapes, o que significa que eles também precisam ser duplicados.

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

Espero que isso ajude alguém no futuro.

    
por 02.03.2013 / 08:51
4

Já tentou executar o "cmd.exe / c growlnotify.exe ..." do MinGW?

    
por 27.02.2013 / 23:36