1. 程式人生 > >[命令列] 配置顏色(windows cmd,powershell,linux console)

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

修改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 <
[email protected]
> #> $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[[email protected]\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[[email protected]\e[35m\h \e[34m\W\e[32m\]]\$ 
這一段是對prompt的設定,主要是配置顏色,需要注意其中有控制碼相關的方括號,也有prompt內容的方括號。
'\e[01,32m['   顯示高亮,綠色的左方括號
['\e[31m\u'   顯示紅色使用者名稱(\u不是控制碼控制,而是PS1中內建的名稱),繼承高亮屬性。
'\e[[email protected]'    顯示黃色的@,繼承高亮屬性。
'\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...\]'     // 改成這樣的模式,每個顏色控制符都加



相關推薦

[命令] 配置顏色windows cmdpowershelllinux console

修改cmd的顏色 color=xy其中x(前景色)和y(背景色)分別可以取以下幾種值:   0 = 黑色       8 = 灰色    1 = 藍色       9 = 淡藍色    2 = 綠色       A = 淡綠色    3 = 淺綠色     B = 淡淺綠色

命令配置scst向windows提供iSCSI儲存資源

Ø fileio模式:預設情況下SCST的匯出模式是fileio。它允許使用檔案系統上的檔案或者塊裝置作為虛擬的SCSI裝置或光碟機,該模式可以充分利用linux的cache。預設情況下,由於效能的原因,VDISK FILEIO device使用write-back caching(寫回) 策略,對於一個穩

[命令] 為windows cmdpowershell配置字型

其實powershell可以看成是cmd的增強版,就僅以powershell為例說明。 快捷方式增加了可選的內容 首先在桌面上建立一個powershell的快捷方式,右鍵》屬性,可以發現裡面有很多選項卡。其中: 1> 選項:這裡面主要是配置內碼表(codepage)

已有的exe始終帶引數執行不需要每次輸入命令的方法create sfx archive

原始需求:由於讓其他人操作時,可能由於看錯或者是手動輸入錯誤,導致命令列引數並不是符合預期的值,結果不能得到想要的結果 工具:winrar 英文中文都可以(不能使用快壓,快壓沒有這個功能)--自行下載(我的資源裡也可以找到) 操作方法: 開啟rar, 選擇要進行自解壓格式的exe檔案,然

Hive命令常用操作資料庫操作表操作

資料庫操作 檢視所有的資料庫 hive> show databases ; 使用資料庫default hive> use default; 檢視資料庫資訊 hive > describe data

Win10 cmd命令PowershellLinux子系統Ubuntu bash自動啟動ssh-agent

        當從win10的cmd命令列,PowerShell,或者Ubuntu子系統訪問SSH伺服器或者SSH Git Server,可以使用證書登入。但是預設情況下,需要每次都輸入證書密碼(passphrase),很不方便。   &n

命令編譯C++Linux下、Windows

C++ 編譯過程   一般而言,對於 C++ 程式編譯有以下4個階段: 預處理(preprocessing) 對源程式中的偽指令(以#開頭的指令)和特殊符號進行處理。偽指令包括巨集定義、條件編譯指令、標頭檔案包含指令等。 編譯(compilation)

樹莓派3B命令配置wifi遠端桌面連線擴充套件儲存

    今天講解一下,剛上手樹莓派時經常會做得三件事情,樹莓派3B命令列配置wifi,遠端桌面連線和擴充套件儲存,在這對這三件事情做個總結,以免下次用的時候又得一個一個百度。 一、樹莓派3B命令列配置wifi     如果你有顯示器的話,直接開啟視覺化介面在右上角就可以視覺

雙網絡卡利用橋接的方式實現同時上內網和外網方法命令配置路由表的操作要簡單

【記錄一下網路資訊後面有用】進入網路連線,分別雙擊兩個網絡卡,點選詳細資訊先記錄下兩個網絡卡ip資訊;在我這裡外網ip是192.168.1.102,閘道器192.168.1.1,DNS:202.96.128.166/202.96.128.86;內網ip是192.168.2.243,內網不用域名解析的話只記ip

如何獲取Windows命令引數資訊Linux中的ps -ef的輸出相似

#列出所有程序資訊 CMD>wmic process #列出所有java程序 CMD>wmic process where caption="java.exe" 注:Windows最令網管詬病的地方就是命令列沒有Unix和Linux強大。但這種情況正在不斷改觀

安裝配置mysqlwindows環境為例

安裝配置mysql(windows環境為例) 1.安裝 從mysql官網下載,並按照說明進行安裝 2.安裝目錄 windows 下預設安裝目錄在 C:\Program Files\MySQL Notes:安裝完成後將C:\Program Files\My

eclipse---Eclipse+mingw+Qt綠色配置方法Windows

  2014年07月02日 15:33:52 deng_sai 閱讀數:1381 標籤: qtmingweclipse綠色配置 更多 個人分類: Qt 本配置需使用的檔案Eclipse+MinGW+qt-win-ope

MySQL:主從庫配置記錄Windows系統

伺服器配置: 阿里雲  2G  1M頻寬 作業系統:winow  server 2012 首先確保所有需要的埠已經在平臺上添加了  安全組規則,打開了埠。 部署目的: 主從庫實現同步以及讀寫分離 主資料庫用於對資料庫進行 修改,

linux使用命令配置顯示器的輸出解析度

說明:有時候圖形管理中最高的解析度被設定得很小,看著螢幕難受 1.顯示自己機器支援的解析度。以我自己的機器來說,最大支援8k,但設定的時候往往不能這麼大,因為還受到顯示器的解析度限制。綠色的VGA-0就是你的系統顯示的名字,留待後用 [[email protected] g

使用setx 命令新增環境變數Windows

背景 用GUI的方法可能新增環境變數可能會比較麻煩,為此可採用命令列操作的方式。 步驟 以管理員身份執行 cmd 輸入 setx \M "path" "%path%[new_path];"。其中\M開關表示新增系統變數,由於%path%` 本身是系統變數和使用者變數拼起來的,不能用此方法新增使用者

Linux命令提示符顏色設定PS1

PS1顏色設定 參考文章(講得比較詳細):bashrc中PS1設定 顏色設定格式: 開始:\[\e[F;B;Cm\] 結束:\e[m 其中’F‘為字型顏色,編號30-37;’B‘為背景色,編號40~47;’C‘為程式碼。 可選顏色 F B 顏色 30 40 黑色 31 41

Centos 7—— Centos 7 命令版安裝圖解

使用VMware建立虛擬機器 點選下一步 點選下一步 下一步 選擇你要安裝的虛擬機器是哪種作業系統 選擇虛擬機器的安裝位置 選擇處理器 自定義記憶體 選擇網路 下一步 下一步 下一步就可

命令配置zone

當伺服器連線到交換機的數量較多時,用命令列配置zone的優勢就體現出來了。 1.數量多的時候,在圖形介面容易點錯。 2.速度比較快 (以下是一臺新上架的一臺交換機,新連線的伺服器和儲存VNX5400) switchshow看到所有伺服器和儲存的埠連線到交換機的wwn(擷取的其中一部分) Index

git命令收集與整理windows

最近開始又撿起git,第一家公司用的就是git,一直掌握的也不深刻,就知道常用的幾個命令,雖然現在用svn,但是覺得git還是不能丟,遂又撿起來了。先總結一部分目前練習用到的,慢慢填補吧~ github荒廢太久了,偶爾也需要拔拔雜草什麼的,而且最近學react,正好可以上傳些demo。git都是

常用終端命令Mac版持續更新

cd 進入當前目錄 ls 檢視當前目錄的內容 mkdir 建立一個目錄 pwd 顯示當前目錄的路徑名 rm 刪除檔案或目錄 sudo -s 獲取root許可權 vim 進入檔案 wq 儲存修改的檔案 先按下esc之後,:wq 退出檔案 to