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

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

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

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

Consegui descobrir algumas dicas no Google de que isso tem algo a ver com a maneira como o Windows não fornece um tty real, mas nenhuma correção. Existe alguma maneira inteligente de forçar isso a funcionar? Alguma maneira de escapar dos argumentos corretamente, de modo que se comporte conforme o esperado?

Nova informação:

Se eu executá-lo com barras triplas, os argumentos serão ignorados. Ao passo que, se eu executá-lo com o formato correto no DOS, ele falhará 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á um aviso com a mensagem 'vai aqui', mas como se eu não tivesse me preocupado em incluir os dois primeiros argumentos. Porém, com barras simples ou duplas, ele nunca envia um aviso (como se eu não tivesse incluído nenhum argumento).

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

Explicação dos vários interruptores.

Responder1

Ok, a resposta adequada segue.

Para escapar dos argumentos de forma que os executáveis ​​dos possam ser usados, você dobra as barras, como:

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

A razão pela qual isso falhou para mim foi porque de alguma forma eu não estava usando o mesmo nome de aplicativo que usei quando comecei no dia anterior (e como um aplicativo diferente ele não estava registrado e o Growl For Windows ignora 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". Acho que msys/bash pode estar expandindo as aspas e depois passando-as, de modo que o executável veja dois argumentos,//t:ComeEspaços". A maneira correta de fazer isso parece ser:

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

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

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

Espero que isso ajude alguém no futuro.

Responder2

Você já tentou executar "cmd.exe /c growlnotify.exe ..." do MinGW?

informação relacionada