
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:
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.
¿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:
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
cmd
Se 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
Default
la sección debajo de sí misma y edítela en consecuencia(verTest
)
- Copie/pegue
lo nuevo de microsoftTerminalTambién es altamente personalizable desde su .json
archivo de configuración, pero ConEmu es más fácil de personalizar y ejecutar múltiples shells.