Können Mingw32/Msys ausführbare Dateien vom Typ dos/cmd.exe ausführen, ohne die Argumente zu vermasseln?

Können Mingw32/Msys ausführbare Dateien vom Typ dos/cmd.exe ausführen, ohne die Argumente zu vermasseln?

Ich versuche, growlnotify.exe von einer Windows-Bash-Eingabeaufforderung aus auszuführen. Eine Neukompilierung für mingw32 ist für mich keine gute Option.

growlnotify funktioniert, wenn ich es von der cmd-Eingabeaufforderung aus verwende, schlägt aber (meistens) von der Bash-Eingabeaufforderung aus fehl. Es scheint nur ein einziges Argument annehmen zu können, eines ohne Schalter (das ist die Benachrichtigungsnachricht). Wenn mehr als ein Argument vorhanden ist, schlägt es stillschweigend fehl. Wenn nur ein Schalter und keine anderen Argumente vorhanden sind, wird dieser Schalter als Nachricht gesendet.

Ich habe bei Google einige Hinweise gefunden, dass es etwas damit zu tun hat, dass Windows kein echtes TTY bereitstellt, aber keine Lösungen. Gibt es eine clevere Möglichkeit, dies zum Laufen zu bringen? Irgendeine Möglichkeit, die Argumente richtig zu maskieren, sodass es sich wie erwartet verhält?

Neue Informationen:

Wenn ich es mit drei Schrägstrichen ausführe, werden die Argumente ignoriert. Wenn ich es jedoch mit dem korrekten Format in DOS ausführe, schlägt es stillschweigend fehl.

Fehler (schlägt auch fehl, wenn ich // verwende):

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

Aber dieses:

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

Dieser sendet eine Benachrichtigung mit der Aussage „Nachricht hier einfügen“, aber so, als hätte ich mir nicht die Mühe gemacht, die ersten beiden Argumente anzugeben. Bei einzelnen oder doppelten Schrägstrichen wird jedoch nie eine Benachrichtigung gesendet (als hätte ich überhaupt keine Argumente angegeben).

Vierfach- und Fünffachschrägstriche verhalten sich genauso wie Dreifachschrägstriche.

Erklärung der verschiedenen Schalter.

Antwort1

Ok, die richtige Antwort folgt.

Um die Argumente zu umgehen, sodass ausführbare DOS-Dateien verwendet werden können, verdoppeln Sie die Schrägstriche, beispielsweise:

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

Der Grund für das Scheitern lag bei mir darin, dass ich aus irgendeinem Grund nicht denselben Anwendungsnamen verwendete wie beim Start am Vortag (und es war als andere Anwendung nicht registriert, und Growl For Windows ignoriert nicht registrierte Benachrichtigungen).

Es gibt noch ein paar weitere erwähnenswerte Tricks. In CMD können Sie die Anweisung wie folgt eingeben:

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

Die „With Spaces“-Bomben. Ich denke, msys/bash erweitert die Anführungszeichen und übergibt sie dann, sodass die ausführbare Datei zwei Argumente sieht,//t:MitUndRäume". Der richtige Weg, dies zu tun, scheint zu sein:

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

Wenn Sie Dateipfade übergeben, sollten Sie außerdem immer noch den DOS-Stil verwenden, also Schrägstriche (da diese letztlich von der DOS-ähnlichen ausführbaren Datei verwendet werden). Diese werden jedoch als Escapezeichen interpretiert, was bedeutet, dass sie ebenfalls verdoppelt werden müssen.

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

Hoffe, dass dies in Zukunft jemandem hilft.

Antwort2

Haben Sie versucht, „cmd.exe /c growlnotify.exe …“ von MinGW aus auszuführen?

verwandte Informationen