修改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-ChildItemColorfunction 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使用者時顯示#,其他使用者顯示$)