Ist es möglich, die Farbe zurückzusetzen, nachdem der Befehl in der cmd-Shell eingegeben wurde?

Ist es möglich, die Farbe zurückzusetzen, nachdem der Befehl in der cmd-Shell eingegeben wurde?

Ich verwende Windows 10 und möchte die Eingabeaufforderung von cmd.exe so einrichten, dass sie genauso aussieht wie meine Bash-Eingabeaufforderung auf demselben Computer. Ich habe ein Startskript eingerichtet, um die Variable PROMPT beim Laden von cmd.exe festzulegen. Dadurch wird erkannt, ob die Shell mit Root-Rechten ausgeführt wird, und die Farbe entsprechend festgelegt:

Schalenfarben

Wie im Screenshot zu sehen, kann ich die Eingabeaufforderung in cmd.exe (die oberen Fenster) jedoch nicht so einrichten, dass die Farbe nach Abschluss des Befehls auf die Standardeinstellung zurückgesetzt wird, wie in bash (die unteren Fenster) gezeigt. Wenn ich bash von cmd aus ausführe, kann die Farbe auch nicht zurückgesetzt werden.

Dann führe ich ls mit Farben in beiden Shells aus. Wenn ich es in cmd oder bash innerhalb von cmd ausführe, kann die Farbe nicht durch die normale Datei zurückgesetzt werden. Wenn ich es jedoch nur in bash ausführe, kann die Farbe zurückgesetzt werden.

ls Farben

Wie kann ich mein Startskript so einrichten, dass das Farbverhalten von cmd.exe mit dem meiner Bash-Shell identisch ist?

Antwort1

Es gibt einige neuere experimentelle Funktionen in der Windows 10-Konsole, die sie viel *NIX-ähnlicher machen. Beispielsweise sind Farben nicht mehr auf die bisher verfügbaren 16 beschränkt, Cursorformen usw.

Die Konfiguration erfolgt wie zuvor über das Eigenschaftenfenster:

Bildbeschreibung hier eingeben

Weitere Details finden Sie hier:

https://devblogs.microsoft.com/commandline/new-experimental-console-features/

Antwort2

Eine Möglichkeit wäre die VerwendungConEmu (angepasstconemu.xml)als Terminalmanager, da es eine vollständige Anpassung des Terminals ermöglicht, kombiniert mit Powershellsprofile.ps1

  • cmdBestimmte Befehle können in Powershell ausgeführt werden, indem dem Befehl Folgendes vorangestellt wird:cmd /c

%UserProfile%\Documents\WindowsPowerShell\profile.ps1

#

            ##::[[--- PowerShell PS1 Profile ---]]::##

#================================================================

  # Parameters
#----------------------------------------------------------------

# ANSI:
  $ESC  = [char]27

# Host.PrivateData
  $PD   = $($Host.PrivateData)


  # Colors
#----------------------------------------------------------------

# Powershell
  $Host.UI.RawUI.BackgroundColor  = ($bckgrnd = 'Black')
  $Host.UI.RawUI.ForegroundColor  = 'Gray'

  $PD.ErrorForegroundColor        = 'Red'
  $PD.ErrorBackgroundColor        = $bckgrnd

  $PD.WarningForegroundColor      = 'Magenta'
  $PD.WarningBackgroundColor      = $bckgrnd

  $PD.DebugForegroundColor        = 'Yellow'
  $PD.DebugBackgroundColor        = $bckgrnd

  $PD.VerboseForegroundColor      = 'Green'
  $PD.VerboseBackgroundColor      = $bckgrnd

  $PD.ProgressForegroundColor     = 'Yellow'
  $PD.ProgressBackgroundColor     = $bckgrnd

  #Clear-Host


  # Prompt
#----------------------------------------------------------------

Function set-prompt {
  Param (
    [Parameter(Position=0)]
    [ValidateSet("Default","Test")]
    $Action
  )

  switch ($Action) {

    "Default" {
      Function global:prompt {
        if (test-path variable:/PSDebugContext) { '[DBG]: ' }
          write-host " "
          write-host ("$ESC[48;2;40;40;40m$ESC[38;2;170;210;0m$(Get-Location) $ESC[0m $ESC[0m")

        if ( $host.UI.RawUI.WindowTitle -match "Administrator" ) {
          $Host.UI.RawUI.ForegroundColor = 'Red'
          $(if ($nestedpromptlevel -ge 1) {
            write-host ('PS $$ ') -ForegroundColor Red -NoNewLine
          } else {
            write-host ('PS $ ') -ForegroundColor Red -NoNewLine
          })
        } else {
          $(if ($nestedpromptlevel -ge 1) {
            write-host ('PS $$ ') -ForegroundColor Blue -NoNewLine
          } else {
            write-host ('PS $ ') -ForegroundColor Blue -NoNewLine
          })
        }

        return " "
      }
    }


    "Test" {
      function prompt() {
        if ( Test-Wow64 ) {
          write-host -NoNewLine "Wow64 "
        }
        if ( Test-Admin ) {
          write-host -NoNewLine -f red "Admin "
        }
        write-host -NoNewLine -ForegroundColor Green $(get-location)
        foreach ( $entry in (get-location -stack)) {
          write-host -NoNewLine -ForegroundColor Red '+';
        }
        write-host -NoNewLine -ForegroundColor Green '>'
        ' '
      }
    }
  }
}

set-prompt Default
  • Zeigt einen farbigen Textpromptfür den Benutzer und eine rote Textaufforderung für einen Administrator
  • Ermöglicht das schnelle Wechseln zwischen Profilen(Neuladen/Umschalten über set-prompt <name>)
    • DefaultAbschnitt darunter kopieren/einfügen und entsprechend bearbeiten(sehen Test)


Microsofts neueTerminalist über seine .jsonKonfigurationsdatei ebenfalls in hohem Maße anpassbar, aber ConEmu lässt sich einfacher anpassen und mehrere Shells davon ausführen.

verwandte Informationen