Windows - Terminalfarben verhalten sich seltsam

Windows - Terminalfarben verhalten sich seltsam

Hyperterminal mit WSL Bash

Ich habe seit einiger Zeit ein seltsames Verhalten mit den Farben festgestellt, die mein Terminal anzeigt. Oben sehen Sie einen Screenshot von Bash (vom Windows Linux Subsystem) innerhalb von Hyper Terminal. Sie können sehen, dass die Farben anfangs in Ordnung sind, aber dann bekomme ich eine Reihe von Berechtigungsproblemen nach einem lsund alles geht schief. Der graue Hintergrund bleibt dann auf unbestimmte Zeit bestehen.

Ich habe zwar keinen Screenshot, aber ich habe dasselbe Verhalten auch in Powershell und VSCode beobachtet – daher zögere ich, dies als ein Problem mit Hyper zu bezeichnen. Es scheint, als würde alles durcheinander geraten, sobald ein Fehler auftritt oder die Shell aus irgendeinem Grund das Bedürfnis verspürt, eine Farbe anzuzeigen.

Darüber hinaus habe ich es ohne Erfolg versucht ls --color=auto– es wurden die gleichen Ergebnisse erzielt.

Kennt jemand eine Windows-/Bash-/WSL-Einstellung, die dies verhindert?

Bearbeiten: Ich habe festgestellt, dass diese Hervorhebung die Standardfarbe für den „Bildschirmhintergrund“ berücksichtigt, die in der Option „Standards“ im Einstellungsbereich von Bash unter Ubuntu unter Windows festgelegt ist, aber nur, wenn bestimmte Befehle aufgerufen werden (wie in meinem obigen Screenshot)? Ist das für jemanden verständlich, der sich besser auskennt als ich?

Bildbeschreibung hier eingeben

Antwort1

Als ich dem auf den Grund ging, fand ich heraus, dass die Lösung darin bestand, die Standardfarben in den WSL-Einstellungen so einzustellen, dass sie eine "Bildschirmhintergrund"-Farbe vonSchwarz(#000). Ich habe versucht, die gewünschte Farbe einzustellen, wie in Scotts Antwort erwähnt, aber das hat nicht funktioniert. Es scheint, dass alle Farben, die von WSL kommen, additiv sind, sodass alle Farbänderungen mit den Hintergrundfarben in Programmen von Drittanbietern (Hyper, VSCode) kombiniert werden und kollidieren würden.

Antwort2

Ihr Update klärt die Situation. Trivialerweise sagen Programme dem Terminal, dass es Text anzeigen soll, indem sie den Text in das Terminal schreiben. Eine weniger offensichtliche Tatsache ist, dass Programme dem Terminal verschiedene andere Aktionen befehlen können (z. B. den Cursor bewegen oder (Teile) des Bildschirms löschen), indem sie nicht angezeigte Zeichen in das Terminal schreiben. Es gibt einige einzelne Zeichen, die Dinge tun (z. B. Backspace und Carriage Return, um nach links zu gehen, und Tab, um nach rechts zu gehen). Aber im Allgemeinen sind es Zeichenfolgen, die fast immer mit Escape beginnen, und daher werden sie als „Escape-Sequenzen“ bezeichnet. In den 1970er und 1980er Jahren, alsTerminals waren Hardwareprodukte, jeder Anbieter wählte seine eigenen Escape-Sequenzen, und es herrschte Chaos. Im Laufe der ZeitEin Standard hat sich entwickelt.

Eine interessante Gruppe von Escape-Sequenzen ist dieWählen Sie die grafische Darstellung (SGR)Familie, die kontrolliertWieanzeigbarer Text wird angezeigt. Dazu gehören Eigenschaften wie Fettdruck, Kursivdruck, Unterstreichung und Farbe. Normalerweise versucht ein Programm, nach der Anzeige von Text in einem anderen Stil als dem Standard, das Terminal auf sein Standardanzeigeschema zurückzusetzen. Es gibt Escape-Sequenzen, umaus Fett, Kursiv und Unterstrichen, aber sie werden nicht so umfassend unterstützt wie die zum Aktivieren dieser Eigenschaften. Es gibt Escape-Sequenzen, um die Farbe auf weißen Vordergrund auf schwarzem Hintergrund einzustellen, aber das ist nicht so toll, weil der Benutzer vielleicht ein anderes Standardschema bevorzugt. Programme, die Farbe verwenden, werden daher normalerweise beendet, indem die Reset-Sequenz gesendet wird – und das schaltet das Terminal auf sein Standardanzeigeschema um, wie in den Eigenschaften angegeben.

Kurz zusammengefasst Programme wie pwddieses zeigen einfach nur Text an, einfach nur Text. Programme, die Text in Farbe anzeigen, werden beendet, indem das Terminal auf seine Standardfarben zurückgesetzt wird, und diese bleiben in Kraft, bis ein anderes Programm eine Escape-Sequenz schreibt, um sie wieder zu ändern.

Bleibt die Frage: Warum das TerminalStartim Weiß-auf-Schwarz-Modus? Vielleicht haben Sie etwas in einer Ihrer Initialisierungsdateien ( .profile, .bashrcusw.), das diese Farben explizit festlegt.

Die Lösung besteht darin, die Standardeigenschaften nach Ihren Wünschen zu ändern (z. B. weißer Text auf schwarzem Hintergrund). Sie scheinen den entsprechenden Dialog gefunden zu haben; ändern Sie einfach die Hintergrundfarbe des Bildschirms auf Schwarz und klicken Sie auf „OK“.

verwandte Informationen