1. 程式人生 > >linux命令列顏色

linux命令列顏色

概述

在現實生活中,每一位 Linux 使用者都要面對 Bash。 雖然第一眼看上去非常枯燥,但是又很多方法能夠讓你的 shell 足夠的個性化。 shell 提示符的彩色增強讓能夠讓你的 shell 獨一無二, 而且還非常清晰易讀。

在本文中我以 Bash shell 為例。因為在不同的終端裡的轉義序列不完全相同, 所以在本文中我使用的是 ANSI 終端。 

Shell 的配置

shell 彩色配置出現在 bash 的個人配置檔案 ~/.bashrc 或者是全域性配置檔案 /etc/bashrc 裡面。 可以通過bashrc 裡面的 PS1 變數來設定提示符的外觀。 

通常情況下,這個條目看起來應該是這個樣子:
~/.bashrc: PS1="\s-\v\$ "
\s 表示 shell 的名稱,-\v 表示他的版本號。 在提示符的最後面我們放置了一個 $。這樣看起來也許有點乏味, 所以不妨試試下面這種模式——這種模式在大多數 Linux 的發行版本下是預設的設定:
~/.bashrc: PS1="\[email protected]\h \w \$ "
這表示 使用者@ 當前目錄 $,這個是大部分 Linux 使用者都熟悉的 shell 提示符。 

轉義序列

要是通過彩色化提示符來增加個性化,就要用到轉義序列。 轉義序列就是一個讓 shell 執行一個特殊步驟的控制指令。 轉義序列通常都是以 ESC 開頭(這也是它的命名原因)。 在 shell 裡表示為 ^[。這種表示法需要一點時間去適應, 也可以用 \033 完成相同的工作(ESC 的 ASCII 碼用十進位制表示就是 27, = 用八進位制表示的 33)。


要直接在 shell 裡面輸入轉義序列我們需要先按 ctrl-v:CTRL-v ESC。 

使用 shell 的顏色

下面我用一個提示符的例子來解釋 shell 的顏色。
~/.bashrc: PS1="\[\033[0;32;40m\[email protected]\h:\w\$ \]"
這樣提示符就全部顯示成綠色了。就像這樣:
[email protected]:~$

\033 聲明瞭轉義序列的開始,然後是 [ 開始定義顏色。 後面的 0 定義了預設的字型寬度。稍後我會介紹其他的可用字元。 轉義序列字串要用 括起來, 防止轉義序列的文字顯示在 shell 裡佔用太多的空間。

下面我們要選擇前景色(這裡是 32,代表綠色)。背景色的 40 表示黑色。 要是不想讓提示符後面的文字也變成綠色,我們用 \033[0m 關閉轉義序列, \033[0m 是 shell 的預設顏色。前景色和背景色都有 8 種可用的選擇。


可選顏色:紅色、綠色、黃色、藍色、洋紅、青色和白色。 他們對應的顏色程式碼是:30(黑色)、31(紅色)、32(綠色)、 33(黃色)、34(藍色)、35(洋紅)、36(青色)、37(白色)。

用同樣色方法設定背景色,不過要把第一個數字“3”替換成“4”, 例如 40、41、42、43、44、45、46、47。

示例:
~/.bashrc: PS1="\[\033[0;37;44m\[email protected]\033[0;32;43m\h:\033[0;33;41m\w$\033[0m\]"

這給了我們一個非常多彩的提示符:
[email protected] ebrain: ~$

我們使用 export PS1="string" 來測試這些設定, 稍後我們要把這些設定轉移到 .bashrc 裡面。 現在我的提示符看起來是這個樣子:
PS1="\[\033[1;34;40m[\033[1;31;40m\[email protected]\h:\w\033[1;34;40m]\033[1;37;40m $\033[0;37;0m\] "

[ [email protected]:~ ]

文字屬性

剛才提到了,在第一個轉義序列後面的“0”是提示符的文字的預設顏色設定。 對於文字屬性來說,這些值是有意義的:0、1、22、4、24、5、25、7、27, 分別表示:預設值、粗體、非粗體、下劃線、非下劃線、閃爍、非閃爍、 反顯、非反顯。

通過下面這一段短小的指令碼,我們可以看看色彩組合。
#!/bin/sh
############################################################
# Nico Golde <nico(at)ngolde.de> Homepage: http://www.ngolde.de
# Last change: Mon Feb 16 16:24:41 CET 2004
############################################################

for attr in 0 1 4 5 7 ; do
    echo "----------------------------------------------------------------"
    printf "ESC[%s;Foreground;Background - \n" $attr
    for fore in 30 31 32 33 34 35 36 37; do
        for back in 40 41 42 43 44 45 46 47; do
            printf '\033[%s;%s;%sm %02s;%02s  ' $attr $fore $back $fore $back
        done
    printf '\n'
    done
    printf '\033[0m'
done
這段指令碼可以從 showansicol.tar.gz 下載,格式是 tar.gz。 

另一個程式

在 shell 中設定顏色不僅僅能建立更加漂亮的提示符, 在編寫控制檯程式的時候也非常有用。

對於一個要使用彩色的程式設計師,就必須要使用類似 slang 或 ncurses 這樣的的庫,者通常會增加執行檔案的大小。 Ncurses 有著或多或少的獨立於終端的型別的優勢。 

C 語言示例

用綠色列印“Hello Word”:
#include <stdio.h>
int main(void){
  const char *const green = "\033[0;40;32m";
  const char *const normal = "\033[0m";
  printf("%sHello World%s\n", green, normal);
  return 0;
}
另外一個有用的轉義序列是 printf("\033[2J"),它和 system(clear) 完成的功能一樣。但是可以不需要標頭檔案unistd.h

使用printf("\033[1K") 可以刪除一行。 

初始化指令碼示例

如果我們想在 /etc/init.d 的 init 指令碼成功的執行後, 得到一個漂亮的、清晰易讀的提示,而不是一個簡單的 '.', 我們可以再一次的使用轉義序列。

這是一段 cron init script 的摘錄:
#!/bin/sh
# Start/stop the cron daemon.
test -f /usr/sbin/cron || exit 0

 case "$1" in
 start)  echo -n "Starting periodic command scheduler: cron"
     start-stop-daemon --start --quiet --exec /usr/sbin/cron

                 echo "."
;;

如果 cron 指令碼執行成功就會顯示一個句點。 可以用 [Ok] 給這些資訊新增上彩色特徵,通過改變 echo 字串,例如:
#!/bin/sh
# Start/stop the cron daemon.
test -f /usr/sbin/cron || exit 0
case "$1" in
start)  echo -n "Starting periodic command scheduler: cron"
        start-stop-daemon --start --quiet --exec /usr/sbin/cron
echo "\[ \033[1;34;40m[ \033[1;32;40mOk \033[1;34;40m]\033[0m\]"
    ;;

把這個設定應用到所有的 init指令碼上非常耗費時間, 除非使用轉義序列 \033 —— 因為 Ctrl-v 不是作為一個字元來處理的。

相關推薦

linux命令顏色

概述 在現實生活中,每一位 Linux 使用者都要面對 Bash。 雖然第一眼看上去非常枯燥,但是又很多方法能夠讓你的 shell 足夠的個性化。 shell 提示符的彩色增強讓能夠讓你的 shell 獨一無二, 而且還非常清晰易讀。在本文中我以 Bash shell 為例

Linux命令提示符顏色設定PS1

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

Linux終端下命令顏色的設定,三步解決

要實現的效果如下: 步驟: 1,在命令列輸入: vim  ~/ .bashrc 2,進入vim編輯器內容頁,然後在vim的最後一行(正文的最後一行),輸入 PS1='\[\033[1;31;1m\]\[email

linux命令學習

awk ~ 匹配符 在pattern部分進行欄位匹配操作。文中包含bin的很多,但要找到以:分割後,第五個匹配bin的使用者名稱,相當於用:將每行分割成陣列,索引5值匹配,則將第一個打印出來 awk -F: '$5 ~ /bin/{print $1}' /etc/passwd awk NR條件語

如何在Linux 命令終端分屏

下面介紹兩種終端分屏工具:screen和tmux   一、使用screen分屏(只能上下分屏,不能左右分屏) (1)安裝工具 在ubuntu系統中使用sudo apt-get install screen 安裝screen工具 (2)使用工具 1,輸入命令scree

RF工具自定義linux命令命令執行程式碼及資料庫訪問

之前寫了幾次資料庫連線和linux命令列執行的程式碼,在此儲存下。 另考慮到python2的中文編碼問題,註釋等都用簡單英文,見諒~  import paramiko class Excsshcmd(): ssh = paramiko.SSHClient()

Linux 命令中使用 tcpdump 抓包

tcpdump 是一款靈活、功能強大的抓包工具,能有效地幫助排查網路故障問題。 以我作為管理員的經驗,在網路連線中經常遇到十分難以排查的故障問題。對於這類情況,tcpdump 便能派上用場。 tcpdump 是一個命令列實用工具,允許你抓取和分析經過系統的流量資料包。它通常被用作於網路故障分析工具以及安全

Linux命令使用matplotlib,報錯_tkinter.TclError: no display name and no $DISPLAY environment variable問題解決

問題 我在Linux命令列使用Python的matplotlib,報錯 File "/usr/lib/python3/dist-packages/matplotlib/pyplot.py", line 1466, in title return gca().set_titl

服務計算 - 3 Golang開發Linux命令實用程式 - selpg

文章目錄 Golang開發Linux命令列實用程式 - selpg 1. 介紹 2. 設計與實現 2.1 設計思路 2.2 功能模組劃分與實現 4 參考文獻

Linux命令內容

    命令列內容: 一般模式 移動游標 【ctrl】+【f】 螢幕【向前】移動一頁 【ctrl】+【b】 螢幕【向後】移動一頁 0 這是數字0:移動到這一行的最前面字元處

mongodb linux 命令部分命令

shell相關命令 輸入help可以看到基本操作命令: 連線 ./mongo --port 8000 --host 10.130.161.16   第二種連線方式 mongo IP:埠/資料庫名 -u 使用者名稱 -p 密碼   退出 exit

linux-命令快捷方式使用

CTRL+P   命令向上翻滾 CTRL+N   命令向下翻滾 CTRL+U  命令列中刪除游標前面的所有字元 CTRL+D  命令列中刪除游標後面的一個字元 CTRL+H  命令列中刪除游標前面的一個字元 CTRL+F  命令列中游標向後移動 CTRL+B  命令列中游標向前移動 C

服務計算3 開發 Linux 命令實用程式

文章目錄 概述 1.解析引數 2.命令列的'<','>','|'符號 3.執行命令列的命令 4.總結 概述 本次作業參考潘老師的部落格 https://pmlpml.github.io/ServiceComput

Linux命令與shell指令碼程式設計大全(二)

十一、處理使用者輸入 命令列引數 讀取引數: $0是程式名,$1是第一個引數,$2是第二個引數,以此類推,直到第9個引數$9。當引數個數超過10以後,需要在變數數字周圍加上花括號,如${10},如果輸入到命令列的引數是字串且含有空格,需要使用引號。 #! /bin/bash echo

Linux命令與shell指令碼程式設計大全(一)

一、基本 bash shell命令 建立檔案 : touch 連結檔案:符號連結:是一個實實在在的檔案,兩個通過符號連結在一起的檔案,彼此的內容並不相同。使用ln -s命令。 硬連結:會建立獨立的虛擬檔案,其中包含了原始檔案的資訊及位置。但他們從根本上而言是同一個檔案。原始檔案必須事

Linux命令與shell指令碼程式設計大全(三)

十二、呈現資料 輸入和輸出     標準檔案描述符                  0 STDIN 標準輸入   &n

linux 命令不顯示路徑了,而顯示為-bash-4.1#的兩種解決辦法

問題描述: linux的命令列介面顯示的不是路徑,而是-bash-4.1#: 原因分析: 出現這個問題的原因是因為沒有配置.bash_profile的問題,或者是我們不小心清空或刪除了.bash_profile檔案。 解決方法 方法一:修改 ~/.bash_profile檔案 1、修改~/.bas

Linux命令翻譯工具

一、背景 經常在linux命令列下有些單詞不認識,複製出來通過翻譯軟體很不方便,如果有個命令列翻譯就比較舒服了。通過下面shell指令碼可以在/usr/bin/yd建立yd命令來進行快速命令列翻譯。 二、程式碼 git地址 #!/bin/bash # # CMD=/usr/bin/yd cat

Linux 命令關閉開啟顯示器及xset: unable to open display ""解決方法

在遠端連線Linux等時,基本用不到顯示器,所以希望能遠端將顯示屏關閉 xset -display :0.0 dpms force off這個命令讓顯示屏進入休眠狀態 xset -display :0.0 dpms force on開啟顯示屏 sleep 1 && xse

在Windows環境下學習Linux命令的幾種方法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!