¿Puede Mingw32/Msys ejecutar ejecutables de dos/cmd.exe sin estropear los argumentos?

¿Puede Mingw32/Msys ejecutar ejecutables de dos/cmd.exe sin estropear los argumentos?

Estoy intentando ejecutar growlnotify.exe desde un indicador de bash de Windows. Recompilarlo para mingw32 no es una buena opción para mí.

growlnotify funciona si lo uso desde el símbolo del sistema cmd, pero falla (principalmente) desde el símbolo del sistema bash. Parece que solo puede aceptar un único argumento, uno sin interruptor (que es el mensaje de notificación). Si hay más de un argumento, falla silenciosamente. Si hay un único cambio y no hay otros argumentos, ese cambio se envía como mensaje.

Me las arreglé para encontrar algunos indicios en Google de que tiene algo que ver con la forma en que Windows no proporciona un tty real, pero no hay soluciones. ¿Existe alguna forma inteligente de forzar que esto funcione? ¿Alguna forma de escapar correctamente de los argumentos para que se comporte como se esperaba?

Nueva información:

Si lo ejecuto con barras triples, los argumentos se ignoran. Mientras que si lo ejecuto con el formato correcto en DOS, falla silenciosamente.

Fallo (también falla si uso //):

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

Pero esto:

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

Éste enviará un aviso con el 'mensaje va aquí', pero como si no me hubiera molestado en incluir los dos primeros argumentos. Sin embargo, con barras simples o dobles, nunca envía un aviso (como si no incluyera ningún argumento).

Las barras cuádruples y quíntuples se comportan igual que las barras triples.

Explicación de los distintos interruptores..

Respuesta1

Ok, la respuesta adecuada sigue.

Para escapar de los argumentos de modo que se puedan usar dos ejecutables, duplique las barras, como por ejemplo:

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

La razón por la que fallaría para mí fue porque de alguna manera no estaba usando el mismo nombre de aplicación que tenía cuando comencé el día anterior (y como una aplicación diferente no estaba registrada, y Growl For Windows ignora las notificaciones no registradas).

Hay algunos otros trucos que vale la pena mencionar. En CMD, puede emitir una declaración como esta:

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

Las bombas "Con Espacios". Creo que msys/bash puede estar expandiendo las comillas y luego pasándolas, de modo que el ejecutable vea dos argumentos,//t:ConyEspacios". La forma correcta de hacerlo parece ser:

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

Además, si pasa alguna ruta de archivo, aún querrá usar el estilo DOS, lo que significa barras (ya que, en última instancia, es el ejecutable similar a DOS el que lo consumirá). Pero estos serán interpretados como fugas, lo que significa que también tendrán que duplicarse.

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

Espero que esto ayude a alguien en el futuro.

Respuesta2

¿Has intentado ejecutar "cmd.exe /c growlnotify.exe ..." desde MinGW?

información relacionada