¿Es posible restablecer el color después de ingresar el comando en cmd shell?

¿Es posible restablecer el color después de ingresar el comando en cmd shell?

Estoy ejecutando Windows 10 y quiero configurar el mensaje cmd.exe de modo que tenga el mismo aspecto que mi mensaje bash en la misma máquina. He configurado un script de inicio para configurar la variable PROMPT al cargar cmd.exe, que detecta si el shell se está ejecutando con privilegios de root y configura el color en consecuencia:

Colores de concha

Sin embargo, como se muestra en la captura de pantalla, no puedo configurar el mensaje en cmd.exe (las ventanas superiores) de modo que el color se restablezca al valor predeterminado después de finalizar el comando, como se muestra en bash (las ventanas inferiores). Si ejecuto bash desde cmd, el color tampoco se puede restablecer.

Luego ejecuto ls con colores en ambos shells, si lo ejecuto en cmd o bash dentro de cmd, el archivo normal no puede restablecer el color. Sin embargo, si lo ejecuto solo en bash, el color se puede restablecer.

¿Tienen colores?

¿Cómo puedo configurar mi secuencia de comandos de inicio de modo que el comportamiento del color de cmd.exe sea idéntico al de mi shell bash?

Respuesta1

Hay algunas características experimentales nuevas en la consola de Windows 10 que la hacen mucho más parecida a *NIX. Por ejemplo, colores que ya no están restringidos a los 16 que estaban disponibles hasta ahora, formas de cursor, etc.

Se configura desde la ventana de propiedades como antes:

ingrese la descripción de la imagen aquí

Más detalles se pueden encontrar aquí:

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

Respuesta2

Una opción sería utilizarConEmu (personalizadoconemu.xml)como administrador de terminal ya que permite una personalización completa del terminal, combinado con Powershellprofile.ps1

  • cmdSe pueden ejecutar comandos específicos en Powershell anteponiendo el comando concmd /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
  • Muestra un texto coloreadoinmediatopara el usuario y un mensaje de texto rojo para un administrador
  • Permite cambiar perfiles sobre la marcha(recargar/cambiar aviso a través de set-prompt <name>)
    • Copie/pegue Defaultla sección debajo de sí misma y edítela en consecuencia(ver Test)


lo nuevo de microsoftTerminalTambién es altamente personalizable desde su .jsonarchivo de configuración, pero ConEmu es más fácil de personalizar y ejecutar múltiples shells.

información relacionada