Можно ли сбросить цвет после ввода команды в оболочке cmd?

Можно ли сбросить цвет после ввода команды в оболочке cmd?

Я работаю под управлением Windows 10 и хочу настроить приглашение cmd.exe так, чтобы оно выглядело так же, как приглашение bash на той же машине. Я настроил скрипт запуска для установки переменной PROMPT при загрузке cmd.exe, который определяет, запущена ли оболочка с привилегиями root, и настраивает цвет соответствующим образом:

Цвета оболочки

Однако, как показано на снимке экрана, я не могу настроить приглашение в cmd.exe (верхние окна) так, чтобы цвет сбрасывался на значение по умолчанию после завершения команды, как показано в bash (нижние окна). Если я запускаю bash из cmd, цвет также не может сбросить.

Затем я запускаю ls с цветами в обеих оболочках, если я запускаю его в cmd или bash внутри cmd, цвет не может быть сброшен обычным файлом. Однако, если я запускаю его только в bash, цвет может быть сброшен.

ls цвета

Как настроить скрипт запуска таким образом, чтобы цветовое поведение cmd.exe было идентично цветовой гамме моей оболочки bash?

решение1

В консоли Windows 10 есть несколько новых экспериментальных функций, которые делают ее более похожей на *NIX. Например, цвета, которые больше не ограничены 16, как было доступно до сих пор, формы курсоров и т. д.

Настраивается из окна свойств, как и прежде:

введите описание изображения здесь

Более подробную информацию можно найти здесь:

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

решение2

Одним из вариантов было бы использованиеConEmu (индивидуальный)conemu.xml)как менеджер терминала, поскольку он позволяет полностью настраивать терминал, в сочетании с Powershellprofile.ps1

  • cmdОпределенные команды можно запустить в Powershell, добавив к ним префикс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
  • Показывает цветной текстбыстрыйдля пользователя и красная текстовая подсказка для администратора
  • Позволяет переключать профили «на лету»(перезагрузить/переключить приглашение через set-prompt <name>)
    • Скопируйте/вставьте Defaultраздел ниже и отредактируйте соответствующим образом.(видеть Test)


Новый MicrosoftТерминалтакже имеет широкие возможности настройки с помощью .jsonконфигурационного файла, но ConEmu проще настраивать и запускать несколько оболочек.

Связанный контент