[命令列] 配置顏色(windows cmd,powershell,linux console)

來源:互聯網
上載者:User
修改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使用者時顯示#,其他使用者顯示$)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.