[命令行] 配置颜色(windows cmd,powershell,linux console)
2012-01-13 11:35
549 查看
修改cmd的颜色
color=xy其中x(前景色)和y(背景色)分别可以取以下几种值: 0 = 黑色 8 = 灰色1 = 蓝色 9 = 淡蓝色
2 = 绿色 A = 淡绿色
3 = 浅绿色 B = 淡浅绿色
4 = 红色 C = 淡红色
5 = 紫色 D = 淡紫色
6 = 黄色 E = 淡黄色
7 = 白色 F = 亮白色
例如color=28直接输入color会恢复至默认设置。
修改powershell的颜色
先大致介绍一下powershell的相关信息。powershell自己拥有很多cmdlet,将很多命令做了alias,例如‘dir’和‘ls’都指向get-childitem,这样无论你习惯win还是linux的命令行,都可以用了。powershell的脚本语法有自身特点,支持一些.net语法,可以自己写一些函数实现某些功能,这里介绍的主要是修改颜色的一些方法。首先,个性化的配置需要每次启动都生效,那么就需要有个用户配置文件。默认的powershell启动时加载配置文件可以在以下路径中寻找。描述 路徑 ----------- ---- 目前使用者、目前主機 $Home\[My ]Documents\WindowsPowerShell \Profile.ps1 目前使用者、所有主機 $Home\[My ]Documents\Profile.ps1 所有使用者、目前主機 $PsHome\Microsoft.PowerShell_profile.ps1 所有使用者、所有主機 $PsHome\Profile.ps1 設定檔路徑包含下列變數: - $PsHome 變數:用於存放 Windows PowerShell 的安裝目錄。 - $Home 變數:用於存放目前使用者的主目錄。假设我的配置文件路径在“C:\Users\GogdizzY\Documents\WindowsPowerShell\profile.ps1”
内容如下:
set-alias ll Get-ChildItemColor function prompt { $my_path = $(get-location).toString() $my_pos = ($my_path).LastIndexOf("\") + 1 if( $my_pos -eq ($my_path).Length ) { $my_path_tail = $my_path } else { $my_path_tail = ($my_path).SubString( $my_pos, ($my_path).Length - $my_pos ) } Write-Host ("[") -nonewline -foregroundcolor 'Green' Write-Host ("Gogdizzy") -nonewline -foregroundcolor 'Red' Write-Host ("@") -nonewline -foregroundcolor 'Yellow' Write-Host ("WIN7 ") -nonewline -foregroundcolor 'Magenta' Write-Host ($my_path_tail) -nonewline -foregroundcolor 'Blue' Write-Host ("]#") -nonewline -foregroundcolor 'Green' return " " } function Get-ChildItemColor { <# .Synopsis Returns childitems with colors by type. .Description This function wraps Get-ChildItem and tries to output the results color-coded by type: Directories - Cyan Compressed - Red Executables - Green Text Files - Gray Image Files - Magenta Others - Gray .ReturnValue All objects returned by Get-ChildItem are passed down the pipeline unmodified. .Notes NAME: Get-ChildItemColor AUTHOR: Tojo2000 <tojo2000@tojo2000.com> #> $regex_opts = ([System.Text.RegularExpressions.RegexOptions]::IgnoreCase ` -bor [System.Text.RegularExpressions.RegexOptions]::Compiled) $fore = $Host.UI.RawUI.ForegroundColor $compressed = New-Object System.Text.RegularExpressions.Regex( '\.(zip|tar|gz|rar|7z|tgz|bz2), $regex_opts) $executable = New-Object System.Text.RegularExpressions.Regex( '\.(exe|bat|cmd|py|pl|ps1|psm1|vbs|rb|reg|sh), $regex_opts) $text_files = New-Object System.Text.RegularExpressions.Regex( '\.(txt|cfg|conf|ini|csv|log), $regex_opts) $image_files = New-Object System.Text.RegularExpressions.Regex( '\.(bmp|jpg|png|gif|jpeg), $regex_opts) Invoke-Expression ("Get-ChildItem $args") | %{ if ($_.GetType().Name -eq 'DirectoryInfo') { $Host.UI.RawUI.ForegroundColor = 'Cyan' } elseif ($compressed.IsMatch($_.Name)) { $Host.UI.RawUI.ForegroundColor = 'Red' } elseif ($executable.IsMatch($_.Name)) { $Host.UI.RawUI.ForegroundColor = 'Green' } elseif ($text_files.IsMatch($_.Name)) { $Host.UI.RawUI.ForegroundColor = 'Gray' } elseif ($image_files.IsMatch($_.Name)) { $Host.UI.RawUI.ForegroundColor = 'Magenta' } else { $Host.UI.RawUI.ForegroundColor = 'Gray' } echo $_ $Host.UI.RawUI.ForegroundColor = $fore } } function Show-Color( [System.ConsoleColor] $color ) { $fore = $Host.UI.RawUI.ForegroundColor $Host.UI.RawUI.ForegroundColor = $color echo ($color).toString() $Host.UI.RawUI.ForegroundColor = $fore } function Show-AllColor { Show-Color('Black') Show-Color('DarkBlue') Show-Color('DarkGreen') Show-Color('DarkCyan') Show-Color('DarkRed') Show-Color('DarkMagenta') Show-Color('DarkYellow') Show-Color('Gray') Show-Color('DarkGray') Show-Color('Blue') Show-Color('Green') Show-Color('Cyan') Show-Color('Red') Show-Color('Magenta') Show-Color('Yellow') Show-Color('White') }可以看到,通过alias,将ll命令关联到Get-ChildItemColor,里面通过文件后缀来决定使用什么颜色。
Get-ChildItemColor是我从网上拷贝的,稍微作了修改。
另外我提供了两个命令,Show-Color和Show-AllColor,如果你有任何需求,可以修改代码中的颜色。
定制个性化的prompt,这是通过重定义function prompt来实现的,即用户的函数替代了系统提供的默认函数,里面通过Write-Host中的-foregroundcolor选项,提供了彩色的命令提示符。
修改linux console的颜色
linux的ls命令本来就就有--color的选项,我使用secureCRT连接linux,所以直接在secureCRT里面设置配色方案。下面讲一下配置彩色的命令行提示符,linux是通过设置PS1变量来实现的。我的PS1变量内容如下:export PS1 = '`_a=$?; if [ $_a -ne 0 ]; then _a=" "$_a; echo -ne "\[\e[s\e[1A\e[$((COLUMNS-2))G\e[31m\e[1;41m${_a:(-3)}\e[u\e[0m\]"; fi`\[\e[01;32m[\e[31m\u\e[33m@\e[35m\h \e[34m\W\e[32m\]]\$'这是我从一个人的博文中抄过来的,主要是在彩色的功能上增加了显示错误代码的能力,下面解释一下含义:
_a=$?; if [ $_a -ne 0 ]; then _a=" "$_a;$?是上一个命令的返回值,如果不是0,那必然是错误代码,将其保存在$_a变量中,并在前面添加3个空格;
echo -ne "\[\e[s\e[1A\e[$((COLUMNS-2))G\e[31m\e[1;41m${_a:(-3)}\e[u\e[0m\]";'\e['是一个控制码,紧跟在在这个控制码后面的字符是由特殊含义的.
'\e[s' 保存当前光标位置
'\e[1A' 向上移动一行
'\e[$((COLUMNS-2))G' $COLUMNS变量存储当前的行宽,相当于移动到最后一个位置的前两个,实际是倒数第三个位置。
'\e[31m' 设置前景色为红色
'\e[1;41m' 设置后景色为红色,前景色加亮
'${a:(-3)}' 取a变量的后3个字符(这下知道前面为什么加3个空格了?因为如果a的长度不够3个,那么需要用空格补够,否则会出错)
'\e[u' 恢复光标位置
'\e[0m' 取消颜色设置
注意,所有控制码命令需要用'\['和'\]'包含起来。
\[\e[01;32m[\e[31m\u\e[33m@\e[35m\h \e[34m\W\e[32m\]]\$这一段是对prompt的设置,主要是配置颜色,需要注意其中有控制码相关的方括号,也有prompt内容的方括号。
'\e[01,32m[' 显示高亮,绿色的左方括号
['\e[31m\u' 显示红色用户名(\u不是控制码控制,而是PS1中内建的名称),继承高亮属性。
'\e[33m@' 显示黄色的@,继承高亮属性。
'\e[35m\h' 显示粉色的主机名(\h是PS1内建名称,显示主机名),继承高亮属性。
'\e[34m\W' 显示蓝色路径名(\W显示相对路径,\w显示绝对路径),继承高亮。
'\e[32m\]' 结束了控制符,并且颜色设置为绿色,继承高亮。
']\$ ' 显示右方括号],然后显示提示符(\$,当是root用户时显示#,其他用户显示$)
设置PS1会遇到的问题
有的系统似乎不识别\e这个控制符,要用\033代替。有的系统设置后,按up键,查看历史命令,会发现提示符prompt消失了,这是因为有的系统对颜色控制符的要求比较严格,必需用“\[”和“\]”把每一个颜色控制符都包含进去。所以我上面所写的PS1环境变量只是在某些系统中可以正确运行,但是放到另外一些系统中可能会有问题,修改如下:
'\[\e...\e...\e...\]' // 之前所说类似这样的模式,只在头和尾加1次 '\[\e...\]\[\e...\]\[\e...\]' // 改成这样的模式,每个颜色控制符都加
相关文章推荐
- 惊艳的cygwin——Windows下的Linux命令行环境的配置和使用
- 将Windows的CMD改造成Linux风格的命令行
- 惊艳的cygwin——Windows下的Linux命令行环境的配置和使用
- Windows、linux系统使用命令提示符功能(cmd,command,又称命令行)详细图文教程和手册下载
- linux下git命令行的颜色配置
- 惊艳的cygwin——Windows下的Linux命令行环境的配置和使用
- Linux命令行颜色配置
- 惊艳的 cygwin——Windows下的Linux命令行环境的配置和使用
- 惊艳的cygwin——Windows下的Linux命令行环境的配置和使用
- 干掉cmd:windows下使用linux命令行
- 惊艳的cygwin——Windows下的Linux命令行环境的配置和使用
- Windows命令行(cmd)下快速查找文件(类似Linux下find命令)
- 惊艳的cygwin——Windows下的Linux命令行环境的配置和使用
- windows命令行(CMD)路由配置
- 惊艳的cygwin——Windows下的Linux命令行环境的配置和使用
- 惊艳的cygwin——Windows下的Linux命令行环境的配置和使用
- Windows下CMD命令行和Linux下命令行的一些使用总结
- Linux和Windows路由配置
- linux和windows互传文件/用户配置文件和密码配置文件/用户组管理/用户管理
- Windows命令行下实现带颜色输出