ich eine Java-Anwendung haben, die unverarbeitet Flucht ANSI escape sequences verwendet Farben anzuzeigen, positionieren Sie den Cursor usw.Sequenzen unter den „Cygwin“ Terminal
Es funktioniert unter regelmäßigen Unices fein, und auch unter xterm
und mintty
(in Cygwin), aber ich habe Probleme, es unter dem Terminal (dh bash
gestartet von cmd.exe
).
Wie Sie aus dem Screenshot sehen:
Escape-Sequenzen ausgegeben werden "wie sie ist", ohne zu verarbeiten. Auf der anderen Seite kann ich einfach wie echo -e '\033[1;31mTest'
- und Farbtext wird nur da sein.
Auch, wenn ich auf meinem Windows melden Sie sich an:
Zur gleichen Zeit, wenn ich von einem Midnight Commander Subshell genau die gleiche Anwendung starten, Sequenzen, die durch die Anwendung erzeugt entkommen korrekt interpretiert werden Box mit SSH (dh ersetzen Sie die lokale Verbindung mit der Remote, aber behalten Sie die gleiche Terminal), wieder, Escape-Sequenzen sind in Ordnung.
Es sieht aus wie wenn eine Subshell einer Art erstellt wird (mc
oder ssh
), das Terminal in einen anderen Modus versetzt wird. Aber es war nicht hilfreich, mit zu spielen, noch war export'ing TERM=ansi
.
Könnte jemand bitte irgendeine Lösung vorschlagen?
Ich bin mit
CYGWIN_NT-6.3 UNIT-725 2.5.1(0.297/5/3) 2016-04-21 22:14 x86_64 Cygwin
und Windows 8.1.
Ich bin ziemlich sicher, dass, wenn Sie Cygwins bash von cmd.exe starten, wird es weiterhin das von Windows zur Verfügung gestellte Konsolenfenster verwenden, anstatt ein eigenes zu erstellen. Die Konsole in der neuesten Version von Windows 10 unterstützt ANSI-Escapesequenzen (obwohl ich glaube, dass sie explizit aktiviert werden muss), frühere Versionen jedoch nicht. Ich weiß nicht, ob es irgendeinen Weg gibt, diese Arbeit zu machen. Ihre beste Option ist wahrscheinlich, einen Starter bereitzustellen, der Ihre Anwendung auf die richtige Weise startet. –
... obwohl die Tatsache, dass echo funktioniert, nahelegt, dass Cygwin eine Art von Übersetzungsschicht hat. Wenn du die Ausgabe irgendwie über Cygwin fütterst, könnte das funktionieren. Vielleicht ein Bash-Skript, das die Ausgabe von Ihrem Prozess umleitet und es an die Konsole sendet? Oder einen Cygwin-basierten Java-Interpreter, wenn es so etwas gibt. –
@HarryJohnston der Punkt ist, 'bash.exe' hat bereits Übersetzungsschicht (Escape-Sequenzen -> Win32 API-Konsolenaufrufe) beim Ausführen als direkte Kind von' cmd.exe' gesagt. Die Frage ist, warum die obige Übersetzung manchmal funktioniert und manchmal nicht. – Bass