É possível redefinir a cor após inserir o comando no cmd shell?

É possível redefinir a cor após inserir o comando no cmd shell?

Estou executando o Windows 10 e desejo configurar o prompt cmd.exe de forma que pareça igual ao meu prompt bash na mesma máquina. Eu configurei um script de inicialização para definir a variável PROMPT ao carregar o cmd.exe, que detecta se o shell está sendo executado com privilégios de root e configura a cor de acordo:

Cores da casca

No entanto, como mostrado na captura de tela, não consigo configurar o prompt em cmd.exe (as janelas superiores) de forma que a cor seja redefinida para o padrão após a conclusão do comando, conforme mostrado no bash (as janelas inferiores). Se eu executar o bash a partir do cmd, a cor também não poderá ser redefinida.

Então eu executo ls com cores em ambos os shells, se eu rodar no cmd, ou bash dentro do cmd, a cor não pode ser redefinida pelo arquivo normal. No entanto, se eu executá-lo apenas no bash, a cor poderá ser redefinida.

são cores

Como posso configurar meu script de inicialização de forma que o comportamento das cores do cmd.exe seja idêntico ao do meu shell bash?

Responder1

Existem alguns recursos experimentais mais recentes no console do Windows 10 que o tornam muito mais parecido com o *NIX. Por exemplo, cores que não estão mais restritas às 16 disponíveis até agora, formatos de cursor, etc.

Ele é configurado nas janelas de propriedades como antes:

insira a descrição da imagem aqui

Mais detalhes podem ser encontrados aqui:

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

Responder2

Uma opção seria usarConEmu (personalizadoconemu.xml)como gerenciador de terminal, pois permite a personalização completa do terminal, combinado com o Powershellprofile.ps1

  • cmdcomandos específicos podem ser executados no Powershell prefaciando o comando comcmd /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
  • Mostra um texto coloridoincitarpara o usuário e um prompt de texto vermelho para um administrador
  • Permite a troca instantânea de perfis(recarregar/trocar prompt via set-prompt <name>)
    • Copie/cole Defaulta seção abaixo dela e edite de acordo(ver Test)


O novo da Microsoftterminaltambém é altamente personalizável a partir de seu .jsonarquivo de configuração, mas o ConEmu é mais fácil de personalizar e executar vários shells.

informação relacionada