![在 cmd shell 中输入命令后可以重置颜色吗?](https://linux22.com/image/1525491/%E5%9C%A8%20cmd%20shell%20%E4%B8%AD%E8%BE%93%E5%85%A5%E5%91%BD%E4%BB%A4%E5%90%8E%E5%8F%AF%E4%BB%A5%E9%87%8D%E7%BD%AE%E9%A2%9C%E8%89%B2%E5%90%97%EF%BC%9F.png)
我正在运行 Windows 10,并希望设置 cmd.exe 提示符,使其看起来与同一台计算机上的 bash 提示符相同。我已经设置了一个启动脚本,用于在加载 cmd.exe 时设置 PROMPT 变量,该脚本检测 shell 是否以 root 权限运行并相应地设置颜色:
但是,如截图所示,我无法在cmd.exe(上方窗口)中设置提示符,以便在完成命令后颜色重置为默认值,如bash(下方窗口)中所示。如果我从cmd运行bash,颜色也无法重置。
然后我在两个 shell 中运行带有颜色的 ls,如果我在 cmd 中运行它,或者在 cmd 中的 bash 中运行它,颜色无法通过普通文件重置。但是,如果我仅在 bash 中运行它,颜色可以重置。
我如何设置我的启动脚本,使得 cmd.exe 的颜色行为与我的 bash shell 相同?
答案1
Windows 10 控制台中有一些较新的实验性功能,使其更像 *NIX。例如,颜色不再局限于迄今为止可用的 16 种颜色、光标形状等。
它与以前一样从属性窗口进行配置:
更多详情可在这找到:
https://devblogs.microsoft.com/commandline/new-experimental-console-features/
答案2
一种选择是使用康埃穆 (定制conemu.xml
)作为终端管理器,因为它允许完全自定义终端,结合 Powershell 的profile.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
)
- 复制粘贴
微软的新终端也可以通过其.json
配置文件进行高度定制,但是 ConEmu 更容易定制并运行多个 shell。