譯者:Nica < nicaliu at gmail dot com >



當你以命令列管理 Linux/unix 作業系統、使用者,並與系統互動時,乃是透過 shell。本文將探討的是 bash shell 提示符號的一些要點。

(以下實作內容與部份譯文,將視譯者在 CentOS 裡的系統實作,而有所調整)







在許多 Linux 裡,預設的 bash 命令列提示符號是沒有區分顏色的,它通常會顯示使用者名稱、主機,與現行工作目錄這三項資訊。本文接下來的段落,將會看到:透過匯出 bash 提符號:PS{n} 變數的方式,便能輕鬆改變這個預設的設定。Bash 提示符號可以依使用者的需求修改,它可以顯示時間、系統負載、現正使用系統的使用者人數、系統啟動時間等等資訊。



Bash 提示符號變數



一如 Linux 系統裡的其它東西:bash 提示符號也是可以客製化的。用改變 bash PS1、PS2、PS3、PS4 變數值的方式,即可客製化 bash 提示符號。為了簡化,本文將僅著墨在 PS1 與 PS2 變數的部份。



透過 echo 命令,查看現行 PS1 與 PS2 變數值為何。



echo "Bash PS1 variable:"  $PS1

echo "Bash PS2 variable:"  $PS2



【譯者 CentOS 系統中,實作如下】

[root@jnt2 ~]# echo "Bash PS1 variable:" $PS1

Bash PS1 variable: [\u@\h \W]\$

[root@jnt2 ~]# echo "Bash PS1 variable:" $PS2

Bash PS1 variable: >

[root@jnt2 ~]#



Bash PS1 提示符號變數



PS1 乃主要的提示符號變數。現行內容為 [\u@\h \W]\$ 這些特殊 bash 字元。這在很多 Linux 系統裡是 bash 提示符號的預設架構方式,它會在每一次你使用終端畫面登入的時侯出現。你可以參考 "Bash 提示符號特定字元" 這段,瞭解 \u、\h 與 \W、 \$ 這些符號分別代表的是什麼意思。下面是在預設值下,典型的 bash 提示符號:



【譯者 CentOS 系統中,實作如下】

[root@jnt2 ~]#



Bash PS2 提示符號變數



PS2 bash shell 變數乃第二順位提示符號。此提示符號,是在 shell 等待使用者輸入的時侯所顯示的,例如當你忘了輸入第二個雙引號的時侯:



【譯者 CentOS 系統中,實作如下】

[root@jnt2 ~]# echo "Miss double-quote

>



Bash 提示符號特殊字元



Bash 提示符號可以透過特殊字元的使用,進行客製化。下面的表格內容為 bash 提示符號特殊字元與其解說。



Bash 特殊字元 Bash 特殊字元解說

\a            ASCII 警示字元 (07)

\]            結束非列印字元的序列

\h            直至第一個 . 之前的主機名稱

\j            由 shell 管理下,現行的工作數

\n            換行符號

\s            shell 名稱,$0 的 basename (接在最後一個斜線之後的那部份)

\T            12 小時格式的現行時間。

\A            24 小時格式的現行時間。

\w            現行工作目錄。

\!            這個命令的歷史訊息編號。

\$            若實際 UID 為 0,就是 #,否則即為 $。

\\            反斜線。

\d            "週 月 日" 格式的日期 (例 "Tue May 26")。

\e            ASCII 跳脫字元 (033)

\H            主機名稱。

\l            shell 之終端裝置名稱的 basename

\r            歸位字元 (carriage return)

\t            24 小時 HH:MM:SS 格式的現行時間。

\@            12 小時 am/pm 格式的現行時間。

\u            現下使用者的 username

\V            bash 釋出的版本加上 patch 編號

\W            現行工作目錄的 basename

\#            此命令的命令編號

\nnn            字元對應的八進制編號 nnn

\[            起始非列印字元的序列,可以用來將終端控制序列嵌入至提示符號中。

\D{format}        此格式將傳送給 strftime(3),然後將結果插入至提示符號字串中;若為空白格式,結果將以本地端指定時間的方式展現。大括弧必指定。

【譯註:若格式為空白,亦必須指定為 \D{},如省略 {},提示符號將直接將 \D 印出來】



Bash 提示符號客製化



使用者登入系統後的使用者環境變數,初始自各式檔案,像是:



.全域性系統檔 /etc/profile 或 /etc/bashrc

.使用者檔案 ~/.bash_profile、~/.bash_login、/profile、~/.bashrc 或 ~/.bash_logout。



在此必須要瞭解的是:所有使用者環境變數的存活時間,就等於終端對話 (session) 的這段時間。當終端對話關閉的同時,使用者的變數 - 包括在終端通訊期間定義的 bash shell 變數都不再有意義,而必須在新終端對話建立時,透過 shell 與 shell 互動的方式,再定義一次。我們可以在此定義兩個變數,證明這件事。



永久性的 bash 變數定義



我們要定義的第一個永久性變數,是放在 bash 初始化檔案之一 ~/bash_profile 裡,第二個變數我們則是在 shell 提示符號下定義:



定義永久性使用者變數:



【譯者 CentOS 系統中,實作如下】

login as: nica

nica@192.168.0.1's password:

Last login: Mon Dec  8 15:18:35 2008 from 192.168.0.102

[nica@jnt2 ~]$ echo "VAR1=PermanentVariable" >> .bash_profile

[nica@jnt2 ~]$ exit

重新登入

login as: nica

nica@192.168.0.1's password:

Last login: Mon Dec  8 15:18:47 2008 from 192.168.0.102

[nica@jnt2 ~]$ echo $VAR1

PermanentVariable

[nica@jnt2 ~]$



在這裡,使用者 nica 修改了自已的 .bash_profile 初始檔 - 也就是放在他/她家目錄下的那個檔案,在該檔,添加了 VAR1 的變數定義。當使用者 nica 登出再登入一次,$var1 變數即已初始化,且可用於新的終端對話之中。



同理,我們可以定義自已的 bash 提示符號。做這件事的最佳位置乃是 bash 初始化檔案 ~/.bashrc。開啟你的 ~/.bashrc 檔,並加入下面這行,定義 PS1 變數:



PS1='MY NEW BASH PROMPT@\t:\w\$ '



注意:你的 ~/.bashrc 檔可能和下面的不大一樣。



【譯者 CentOS 系統中,實作如下】

# .bashrc



# Source global definitions

if [ -f /etc/bashrc ]; then

. /etc/bashrc

fi

PS1='mynew bash prompt@\t:\w\$ '  <<==新增這行

# User specific aliases and functions



新的 bash 提示符號將會以如上的方式歡迎你。此變動對 bash 提示符號而言是永久性的。



提示:



使用 source 命令可以重新取讀 bash 初始檔 .bashrc,重新啟動一個新的終端對話取代之。



【譯者 CentOS 系統中,實作如下】

[nica@jnt2 ~]$ vi .bashrc

[nica@jnt2 ~]$ source .bashrc

mynew bash prompt@16:01:26:~$



或單純的:

【譯者 CentOS 系統中,實作如下】

mynew bash prompt@16:02:25:~$ . .bashrc 【譯註:英文的句點一個、空一格,再加上 .bashrc】

my new2 bash prompt@16:02:41:~$



暫時性 bash 變數定義



暫時性的 bash 變數定義僅存於現下終端對話的生命週期,透過 export 這個命令來作:



【譯者 CentOS 系統中,實作如下】

[nica@jnt2 ~]$ export VAR2=TemporaryVariable

[nica@jnt2 ~]$ echo $VAR1

PermanentVariable

[nica@jnt2 ~]$ echo $VAR2

TemporaryVariable

[nica@jnt2 ~]$ exit

登出再登入

[nica@jnt2 ~]$ echo $VAR1

PermanentVariable

[nica@jnt2 ~]$ echo $VAR2



[nica@jnt2 ~]$



如你所見,使用者關閉他/她的終端對話,變數 $VAR2 即無定義了。而永久性變數 $VAR1 則永遠有來自 bash 初始化檔案 ~/.bash_profile 的定義。我們可以用 export 命令定義新的變數,同樣也可以用它來修改 bash 提示符號 $PS1 變數。欲變更現有 bash 提示符號,使其只顯示時間,我們可以:



export PS1="\t:"



【譯者 CentOS 系統中,實作如下】

[nica@jnt2 ~]$ export PS1="\t:"

17:31:47:

17:31:50:

17:31:51:

17:31:55:

17:31:55:



(…)



原文詳見:Bash prompt basics



如有版權問題,請來信 < nicaliu at gmail dot com > 告知,謝謝
arrow
arrow
    全站熱搜

    nicaliu 發表在 痞客邦 留言(0) 人氣()