
Я работаю под управлением Windows 10 и хочу настроить приглашение cmd.exe так, чтобы оно выглядело так же, как приглашение bash на той же машине. Я настроил скрипт запуска для установки переменной PROMPT при загрузке cmd.exe, который определяет, запущена ли оболочка с привилегиями root, и настраивает цвет соответствующим образом:
Однако, как показано на снимке экрана, я не могу настроить приглашение в cmd.exe (верхние окна) так, чтобы цвет сбрасывался на значение по умолчанию после завершения команды, как показано в bash (нижние окна). Если я запускаю bash из cmd, цвет также не может сбросить.
Затем я запускаю ls с цветами в обеих оболочках, если я запускаю его в cmd или bash внутри cmd, цвет не может быть сброшен обычным файлом. Однако, если я запускаю его только в bash, цвет может быть сброшен.
Как настроить скрипт запуска таким образом, чтобы цветовое поведение 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 проще настраивать и запускать несколько оболочек.