Mac終端命令行提示符格式更改方法


內容提要:

主要是通過~/.bash_profile文件更改環境變量PS1,修改命令行提示符的顯示格式,並展示不同顏色。

本文介紹了默認設置的缺陷,以及需要用到的基礎知識,最后介紹了更改命令行提示符格式的具體方法:

1.默認設置的缺陷

我的mac終端的設置風格是Basic,字體是Menlo Regular 13 pt.,  我敲打命令時它的顯示如下:

Sheron-lvdeMacBook-Pro:~ sheron_lv$ cd codeLv/
Sheron-lvdeMacBook-Pro:codeLv sheron_lv$ ls
JsHtml    android    ios    java    myweb
Sheron-lvdeMacBook-Pro:codeLv sheron_lv$ cd ios
Sheron-lvdeMacBook-Pro:ios sheron_lv$ ls
crm-apollo-swift    iphone-nova
crm-mobile-hybrid-ios    iphone-nova-merchant
Sheron-lvdeMacBook-Pro:ios sheron_lv$ 

這樣在查找上面的命令時,比較困難,整個屏幕都是一個顏色。

2. 基礎知識

(1)mac中的一個重要的配置文件:

   /etc/profile: 每個用戶登錄時都會運行的環境變量設置.

       ~/.bash_profile: 每個用戶都可使用該文件輸入專用於自己使用的shell信息,當用戶登錄時,該文件僅僅執行一次!默認情況下,它設置一些環境變量。

(2)要修改命令行提示符,我們通過環境變量PS1來達到目的。

 

  命令列表的參數:

  \u 顯示當前用戶的用戶名(user name

  \h 顯示主機名(host name

   \W 顯示當前工作目錄的名字(work directory)

   \$ 顯示$符作為提示符,如果用戶是root的話,則顯示#

(3)文本終端的顏色可以使用“ANSI非常規字符序列”來生成

 

  “\033”引導非常規字符序列

  “m”意味着設置屬性然后結束非常規字符序列

   編碼    顏色/動作 

  0       重新設置屬性到缺省設置 

  33      設置棕色前景

  34      設置藍色前景

  36      設置青色前景 

(4)通過上面的介紹,我們查看一下當前的PS1,就能看懂了:

Sheron-lvdeMacBook-Pro:ios sheron_lv$ $echo echo $PS1
\h:\W \u\$

很簡單,格式"\h:\W \u\$",代表的是:"主機名:目錄 用戶名$"

3.更改命令行提示符格式的具體方法

(1)修改一下當前hostname,我之前起的名字太繁瑣了:“Sheron-lvdeMacBook-Pro”,太長了,看着很煩

 

  查看hostname命令

Sheron-lvdeMacBook-Pro:etc sheron_lv$ hostname
Sheron-lvdeMacBook-Pro.local

修改hostname:打開系統偏好設置 - 共享, 修改計算機名字,我就修改簡單點兒,叫“MacLv”好了。

(2)修改命令提示符格式為[user@hostname] currentpath $

  根據上面2(2)的基礎知識介紹,我們可以在~/.bash_profile文件中修改PS1的代碼:

export PS1='[\u@\h] \W\$ '

現在命令提示符的格式效果變成這樣的了:

[sheron_lv@MacLv] ~ $ 

看着清爽了很多。

(3)增加些顏色

  根據上面2(2)的基礎知識介紹,我們可以更改~/.bash_profile文件中PS1的代碼:

export PS1='\033[01;33m\][\u@\h ]\033[01;34m\]\W \[\033[01;36m\]\$\[\033[00m\] '

此時效果如下:

這樣查歷史命令就能方便點了,可能我設置的顏色比較不中看,你可以根據ANSI非常規字符序列不同的編碼設置自己喜歡的效果。 

 上面是單步講解,可以把~/.bash_profile文件直接改為以下內容:

#enables colorin the terminal bash shell export

CLICOLOR=1

#sets up thecolor scheme for list export

LSCOLORS=gxfxcxdxbxegedabagacad

#sets up theprompt color (currently a green similar to linux terminal)

export PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$ '

#enables colorfor iTerm

exportTERM=xterm-color
PATH="/usr/local/mysql/bin:${PATH}"
export PATH
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/
export VERSIONER_PYTHON_PREFER_64_BIT=yes
export VERSIONER_PYTHON_PREFER_32_BIT=no

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*

 

我使用的Linux發行版是LinuxMint 17.2 Rafaela,默認情況下Terminal中的shell提示包括了用戶名、主機名、當前目錄(絕對路徑)和提示符。這樣會導致當進入一個比較深的目錄時,提示符太長(如下圖所示),操作起來就不太方便了。

 

 我們可以自定義Linux系統終端提示符。Linux系統終端提示符的特征由系統環境變量PS1(是“prompt string one” 的簡寫)定義。通過命令echo $PS1查看當前設置。從上圖可以看到我的Linux機器上該環境變量PS1的值。下面我們通過改變環境變量PS1的值來將shell提示符設置得更加清爽點。

1.基本轉義字符

PS1的值由一系列靜態文本或\和轉義字符序列組成,如:

 $ PS1=”\u@\H \w$ ”

 表1: Shell 提示符中用到的轉義字符

序列

顯示值

\a

以 ASCII 格式編碼的鈴聲 . 當遇到這個轉義序列時,計算機會發出嗡嗡的響聲。

\d

以日,月,天格式來表示當前日期。例如,“Mon May 26”

\h

本地機的主機名,但不帶末尾的域名。

\H

完整的主機名。

\j

運行在當前 shell 會話中的工作數。

\l

當前終端設備名。

\n

一個換行符。

\r

一個回車符。

\s

shell 程序名。

\t

以24小時制,hours:minutes:seconds 的格式表示當前時間.

\T

以12小時制表示當前時間。 

\@

以12小時制,AM/PM 格式來表示當前時間,例如“10:51 PM”。

\A

以24小時制,hours:minutes 格式表示當前時間。

\u

當前用戶名。

\v

shell 程序的版本號,例如4.3。

\V

shell 程序的版本號,例如4.3.11。

\w

當前工作目錄名。

\W

當前工作目錄名的最后部分。

\!

當前命令的歷史號。 

\#

當前 shell 會話中的命令數。 

\$

這會顯示一個"$"字符,除非你擁有超級用戶權限。在那種情況下, 它會顯示一個"#"字符。

\[

標志着一系列一個或多個非打印字符的開始。這被用來嵌入非打印的控制字符,這些字符以某種方式來操作終端仿真器,比方說移動光標或者是更改文本顏色。 

\]

標志着非打印字符序列結束。 

例如我現在想讓提示符顯示格式為:“<用戶名>@<當前目錄名> $ ”,則

$ PS1=”\u@\W\$ ”

效果如下所示,

上面能夠滿足我們的效果了,但是相對於LinuxMint原始的提示符,缺少了顏色,不太美觀。下面我們來學習如何添加顏色。大多數終端仿真器程序支持一定的非打印字符序列來控制,比方說字符屬性(像顏色,黑體和可怕的閃爍) 和光標位置。

2.字體顏色

字體顏色是由一個ANSI 轉義編碼來控制的。該控制編碼會嵌入字符流中並發送給終端仿真器。但是,該控制編碼不會被“打印”到屏幕上,而是會被終端解釋為一個指令。正如我們在上表看到的字符序列, 這個 \[ 和 \] 序列被用來封裝這些非打印字符。一個 ANSI 轉義編碼以一個八進制033(這個編碼是由 退出按鍵產生的)開頭,其后跟着一個可選的字符屬性(0:正常、1:黑體、4:下划線、5:閃爍、7:反向(前景色和背景色反轉)),在之后是一個指令。

表14-2: 用轉義序列來設置文本顏色

序列

文本顏色

序列

文本顏色

\033[0;30m

黑色

\033[1;30m 

深灰色

\033[0;31m

紅色

\033[1;31m 

淺紅色

\033[0;32m 

綠色

\033[1;32m 

淺綠色

\033[0;33m 

棕色

\033[1;33m 

黃色

\033[0;34m 

藍色

\033[1;34m 

淺藍色

\033[0;35m 

粉紅

\033[1;35m 

淺粉色

\033[0;36m 

青色

\033[1;36m 

淺青色

\033[0;37m 

淺灰色

\033[1;37m 

白色

 例如我們來設置一個同LinuxMint默認的綠色提示符,

$ PS1="\[\033[01;32m\]\u@\W\$\[\033[00m\] "

於是,我們便有了下面的效果。

上面跟設置的提示符格式中的最后那個”\[\033[00m\]”是用於將后續的字符顏色還原回原來的顏色。如果沒有沒有加最后這個轉義碼,則會出現下面結果(我們自己手工輸入的命令也都將是綠色的)。

 3.背景顏色

除了字體顏色,我們也可以設置字體的背景顏色。同樣是通過轉義的控制編碼來實現,下表是背景顏色的控制編碼。

表3: 用轉義序列來設置背景顏色

\033[0;40m 

黑色

\033[1;44m 

藍色

\033[0;41m 

紅色

\033[1;45m 

粉紅

\033[0;42m 

綠色

\033[1;46m 

青色

\033[0;43m 

棕色

\033[1;47m 

淺灰色

4.移動光標:

轉義編碼也可以用來定位光標。這些編碼通常被用來,每次當提示符出現的時候,會在屏幕的不同位置,比如說上面一個角落,顯示一個時鍾或者其它一些信息。下表是一系列用來定位光標的轉義編碼:

表14-4: 光標移動轉義序列

轉義編碼

行動

\033[l;cH 

把光標移到第 l 行,第 c 列。

\033[nA 

把光標向上移動 n 行。

\033[nB 

把光標向下移動 n 行。

\033[nC 

把光標向前移動 n 個字符。

\033[nD 

把光標向后移動 n 個字符。

\033[2J 

清空屏幕,把光標移到左上角(第零行,第零列)。

\033[K 

清空從光標位置到當前行末的內容。

\033[s 

存儲當前光標位置。

\033[u 

喚醒之前存儲的光標位置。

5.保存提示符

我們在當前打開的Terminal中設置環境變量PS1的值來自定義的終端提示符,只在當前Terminal中有效,打開新的Terminal就會采用系統默認的提示符了。我們當讓不希望每次打開Terminal的時候都要重新設置一次SP1環境變量。

~/.bashrc文件會在每次打開一個Terminal之前會被執行一次。於是,我們可以將設置環境變量SP1的命令放到該文件中,便不需要每次都手工再設置一次SP1的值。於是,我們在~/.bashrc配置文件末尾加入下面兩行內容,

PS1="\[\033[01;32m\]\u@\W\$\[\033[00m\] "
export PS1

於是,每次打開Terminal便都會有如下提示符效果,

6.示例

(1)格式:“<用戶名>@<當前目錄名>$”

$ PS1="\u@\W\$ "

效果如下:

(2)添加下划線:

$ PS1="\[\033[4;37m\]\u@\W\$\[\033[00m\] "

效果如下:

(3)前景色為綠色:

$ PS1="\[\033[0;32m\]\u@\W\$\[\033[00m\] "

效果如下:

(4)前景色為綠色,背景色為紅色:

$ PS1="\[\033[0;41m\033[1;32m\]\u@\W\$\[\033[00m\] "

效果如下:

 

(5)設置一個超級復雜的,通過移動光標來設置一個每次顯示提示符的時候都在當前Terminal的第一行顯示當前時間。

$ PS1='\[\033[s\033[0;0H\033[0;41m\033[K\033[1;33m\t\033[0m\033[u\033[1;32m\]\u@\W\$ \[\033[00m\] '

效果如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM