程式扎記: [Linux 文章收集] Linux CLI 提示字元的設定

標籤

2014年10月23日 星期四

[Linux 文章收集] Linux CLI 提示字元的設定

Source From Here 
Preface 
你可透過設定 提示字元變數名稱:PS11為數字1)來變更 Linux 登入 terminal 的提示符: 
 

和 Linux 內的許多程序一樣,shell 提示符是可高度配置的,雖然我們把它相當多地看作是理所當然的, 但是我們一旦學會了怎樣控制它,shell 提示符是一個真正有用的設備。 

解剖一個提示符 
我們默認的提示符看起來像這樣: 
[root@nlg5 ~]#

注意它包含我們的 用戶名,主機名和當前工作目錄,但是它又是怎樣得到這些東西的呢?結果證明非常簡單。提示符是由一個環境變量定義的,叫做 PS1是“prompt string one” 的簡寫)。我們可以通過 echo 命令來查看 PS1 的內容。 
[john@nlg5 ~]$ echo $PS1
[\u@\h \W]$

從輸出結果中,我們看到那個PS1 環境變量包含一些這樣的字符,比方說中括號,@符號,和美元符號, 但是剩餘部分就是在提示符中shell 會特殊對待得字符列表包括: 
 

添加顏色 
大多數終端仿真器程序支持一定的非打印字符序列來控制,比方說字符屬性(像顏色,黑體和可怕的閃爍) 和光標位置。我們會更深入地討論光標位置,但首先我們要看一下字體顏色: 
Terminal Confusion

Back in ancient times, when terminals were hooked to remote computers, there were many competing brands of terminals and they all worked differently. They had different keyboards and they all had different ways of interpreting control information. Unix and Unix-like systems have two rather complex subsystems to deal with the babel of terminal control (called termcap and terminfo). If you look in the deepest recesses of your terminal emulator settings you may find a setting for the type of terminal emulation.

In an effort to make terminals speak some sort of common language, the American National Standards Institute (ANSI) developed a standard set of character sequences to control video terminals. Old time DOS users will remember the ANSI.SYS file that was used to enable interpretation of these codes.

字符顏色是由發送到終端仿真器的一個嵌入到了要顯示的字符流中的ANSI 轉義編碼來控制的。這個控制編碼不會“打印”到屏幕上,而是被終端解釋為一個指令。正如我們在上表看到的字符序列, 這個[ 和] 序列被用來封裝這些非打印字符。一個ANSI 轉義編碼以一個八進制 033(這個編碼是由退出按鍵產生的)開頭,其後跟著一個可選的字符屬性,在之後是一個指令。例如,把文本顏色設為正常(attribute = 0),黑色文本的編碼如下: 
\033[0;30m

地下是一個可用的文本顏色列表, 並使用變數代表: 
  1. txtblk='\e[0;30m' # Black - Regular  
  2. txtred='\e[0;31m' # Red  
  3. txtgrn='\e[0;32m' # Green  
  4. txtylw='\e[0;33m' # Yellow  
  5. txtblu='\e[0;34m' # Blue  
  6. txtpur='\e[0;35m' # Purple  
  7. txtcyn='\e[0;36m' # Cyan  
  8. txtwht='\e[0;37m' # White  
  9. bldblk='\e[1;30m' # Black - Bold  
  10. bldred='\e[1;31m' # Red  
  11. bldgrn='\e[1;32m' # Green  
  12. bldylw='\e[1;33m' # Yellow  
  13. bldblu='\e[1;34m' # Blue  
  14. bldpur='\e[1;35m' # Purple  
  15. bldcyn='\e[1;36m' # Cyan  
  16. bldwht='\e[1;37m' # White  
  17. unkblk='\e[4;30m' # Black - Underline  
  18. undred='\e[4;31m' # Red  
  19. undgrn='\e[4;32m' # Green  
  20. undylw='\e[4;33m' # Yellow  
  21. undblu='\e[4;34m' # Blue  
  22. undpur='\e[4;35m' # Purple  
  23. undcyn='\e[4;36m' # Cyan  
  24. undwht='\e[4;37m' # White  
  25. bakblk='\e[40m'   # Black - Background  
  26. bakred='\e[41m'   # Red  
  27. bakgrn='\e[42m'   # Green  
  28. bakylw='\e[43m'   # Yellow  
  29. bakblu='\e[44m'   # Blue  
  30. bakpur='\e[45m'   # Purple  
  31. bakcyn='\e[46m'   # Cyan  
  32. bakwht='\e[47m'   # White  
  33. txtrst='\e[0m'    # Text Reset  
讓我們試著製作一個紅色提示符。我們將在開頭加入轉義編碼: 
[root@nlg5 ~]# PS1='\[\033[0;31m\]<\u@\h \W>\$\[\033[0m\]'
#echo $PS1
\[\033[0;31m\]<\u@\h \W>\$\[\033[0m\]

 

Example 
如果你要客製自己的 Terminal 提示符, 可以考慮將 PS1 設定設置在 /etc/bashrc 下: 
# vi /etc/bashrc
  1. ...  
  2. bldred='\e[1;31m' # Red  
  3. txtrst='\e[0m'    # Text Reset  
  4. if [ $(id -u) -eq 0 ];  
  5. then # you are root, set red color prompt  
  6.     #PS1="\\[$(tput setaf 1)\\]\\u@\\h:\\w #\\[$(tput sgr0)\\] "  
  7.     PS1="$bldred[\u@\h \w]\$$txtrst "  
  8. else # normal  
  9.     PS1="[\\u@\\h:\\w]$ "  
  10. fi  
. /etc/bashrc # 使設定生效
root@nlg5:~ # su john # 切換使用者
[john@nlg5:/root]$

Supplement 
Linux/Unix Command - tput 
tput, reset - initialize a terminal or query terminfo database

自定制shell 提示符 
鳥哥 Linux 私房菜 - 認識與學習 BASH 
nixCraft - How to: Change / Setup bash custom prompt (PS1) 
Bash tips: Colors and formatting

沒有留言:

張貼留言

網誌存檔

關於我自己

我的相片
Where there is a will, there is a way!