Linux下PS1、PS2、PS3、PS4使用詳解
原文:http://www.linuxidc.com/Linux/2016-10/136597.htm
1、PS1——默認提示符
如下所示,可以通過修改Linux下的默認提示符,使其更加實用。在下面的例子中,默認的PS1的值是“\s-\v\$”,顯示出了shell的名稱的版本。我們通過修改,可以使其顯示用戶名、主機名和當前工作目錄。
-bash-3.2$ export PS1="\u@\h \w> "?
ramesh@dev-db ~> cd /etc/mail?
ramesh@dev-db /etc/mail>
[注: 提示符修改為 "username@hostname current-dir>的形式]
本例中PS1使用的一些代碼如下:
o \u -- 用戶名?
o \h -- 主機名?
o \w -- 當前目錄的完整路徑。請注意當你在主目錄下的時候,如上面所示只會顯示~
注意,在PS1值之后有一個空格。從個人角度來講,使用這個空格可以增加一定的可讀性。
將export PS1=”\u@\h \w>" 添加到.bash_profile 或者 .bashrc中,則可以保證其永久有效。
ramesh@dev-db ~> vi ~/.bash_profile?
ramesh@dev-db ~> vi ~/.bashrc
[注: 將命令添加到以上任何一個即可]
PS(Prompt Sign): 是指命令提示符,例如在Fedora?12的終端下:[linuxidc@liutao ~]$ ,在設定PS1環境變量時,我們需要用到預設的一些特殊符號來設定PS1。
Linux中PS1設置:
在/etc/.bashrc中,找到PS1變量的定義,如果沒有,手動加上:
可以將顯示輸出到標題欄上:
[root@elk-node1 ~]#?vim /root/.bashrc
...........
export PS1="\[\e]2;\u@\H \w\a\e[32;1m\]>\[\e[0m\]"
[root@elk-node1 ~]#?source /root/.bashrc
export PS1="\[\e]2;\u@\H \w\a\e[32;1m\]>\[\e[0m\]"
[root@elk-node1 ~]#?. /root/.bashrc
>cd /usr/local/
>pwd
/usr/local
>
最常見的設置:
1)粉紅色的
[root@elk-node1 ~]#?vim /root/.bashrc
...........
export PS1="\[\e[35;1m\][\u@\h \W]$>\[\e[0m\]"
[root@elk-node1 ~]#?source /root/.bashrc
[root@elk-node1 local]$>cd /usr/local/
[root@elk-node1 ~]$>cd /usr/local/
[root@elk-node1 local]$>pwd
/usr/local
[root@elk-node1 local]$>
2)綠色設置
[root@elk-node1 ~]#?vim /root/.bashrc
...........
export PS1="\[\e[32;1m\][\u@\h \W]$>\[\e[0m\]"
[root@elk-node1 ~]#?source /root/.bashrc
[root@elk-node1 local]$>cd /usr/local/
[root@elk-node1 ~]$>cd /usr/local/
[root@elk-node1 local]$>pwd
/usr/local
[root@elk-node1 local]$>
?
------------------------------------------------------------------------------------------
上面切換到顯示的是當前簡介路徑。那么如何讓linux終端命令提示符號顯示全路徑,而不是當前簡介路徑?
下面兩種方法:
1)第一種方法:在/root/.bashrc文件下添加下面內容
[root@elk-node1 ~]# vim /root/.bashrc?
.......
export PS1="[\u@\h \w]\$"
[root@elk-node1 ~]# source /root/.bashrc
[root@elk-node1 ~]$cd /usr/local/
[root@elk-node1 /usr/local]$ ? ? ? ? ? ? ? ??#顯示的是全路徑
如果將上面的內容改為export PS1="[\u@\h \w]"#,那么顯示的就是#符號
[root@elk-node1 ~]# vim /root/.bashrc?
.......
export PS1="[\u@\h \w]"#
[root@elk-node1 ~]# source /root/.bashrc
[root@elk-node1 ~]#cd /usr/local/
[root@elk-node1 /usr/local]#?? ? ? ? ? ? ? ??#顯示的是全路徑
注意:默認的PS1="[\u@\h \W]\$",其中\W就是路徑的設置選項,大寫的W是簡介模式,小寫的w為全路徑模式。
2)第二種方法:在/root/.bashrc文件下添加下面內容:
[root@elk-node1 ~]# vim /root/.bashrc?
.......
export PS1="[\u@\h \`pwd\`]$"
[root@elk-node1 ~]# source /root/.bashrc
[root@elk-node1 ~]$cd /usr/local/
[root@elk-node1 /usr/local]$ ???#顯示的是全路徑
改為#號
[root@elk-node1 ~]# vim /root/.bashrc?
.......
export PS1="[\u@\h \`pwd\`]#"
[root@elk-node1 ~]# source /root/.bashrc
[root@elk-node1 ~]$cd /usr/local/
[root@elk-node1 /usr/local]$ ? ???#顯示的是全路徑
?
-------------------------------------------------------------------------------------------------------------------------------
?使用方法:
# PS1='自定義內容'
注意兩邊的單引號
示例: PS1='(\u@\H \d\t)\$'
----------------------------------------------------------------------------------------------------------------
PS1:就是用戶平時的提示符。
PS2:第一行沒輸完,等待第二行輸入的提示符。?
Linux系統提示符是用系統變量PS1來定義的。一般系統默認的形式是:[username@host工作目錄]$.?
用echo $PS1可以得到PS1的值,即PS1="[\u@\h \w]"\$?
登錄后可以更改PS1的顯示樣式,但是當退出重啟登錄進入系統后,樣式又變成系統默認的樣式了,如果要徹底改變它的樣式,只能從配置文件中改。
PS是在用戶根目錄下的.bash_profile中定義的。
如:
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startupprograms
#以下是設定的PS1的值?
PS1="[\u@\h \w]\$"
PATH=$PATH:$HOME/bin
#使用export把PS1輸出,以使它可以在子shell中生效,這會造成ROOT用戶的也采用此樣式
#export PS1 要慎用?
export PATH?
unset USERNAME
下面簡單說說環境下默認的特殊符號所代表的意義:
\d :代表日期,格式為weekday month date,例如:"Mon Aug1"
\H:完整的主機名稱。例如:我的機器名稱為:fc4.linux,則這個名稱就是fc4.linux
\h :僅取主機的第一個名字,如上例,則為fc4,.linux則被省略?
\t :顯示時間為24小時格式,如:HH:MM:SS?
\T :顯示時間為12小時格式?
\A :顯示時間為24小時格式:HH:MM?
\u :當前用戶的賬號名稱
\v :BASH的版本信息
\w :完整的工作目錄名稱。家目錄會以 ~代替
\W :利用basename取得工作目錄名稱,所以只會列出最后一個目錄
\# :下達的第幾個命令
\$ :提示字符,如果是root時,提示符為:# ,普通用戶則為:$
==================================================
我們可以通過設置PS1變量使提示符成為彩色。在PS1中設置字符序列顏色的格式為:
\[\e[F;Bm\]
其中``F''為字體顏色,編號30~37;``B''為背景色,編號40~47。
可通過``\e[0m''關閉顏色輸出;特別的,當B為1時,將顯示加亮加粗的文字,詳細請看下面的顏色表與代碼表。
顏色表
前景 背景 顏色
---------------------------------------
30 40 黑色
31 41 紅色
32 42 綠色
33 43 黃色
34 44 藍色
35 45 紫紅色
36 46 青藍色
37 47 白色
?
代碼 意義
-------------------------
0 OFF
1 高亮顯示
4 underline
5 閃爍
7 反白顯示
8 不可見
如果想要設置終端提示符的樣式只要把$PS1在~/.bahrc指定即可比,比如我的設置如下:
設置一:
PS1="\[\e[32m\][\u@\h \w]$\[\e[m\]"
export PS1
效果:
[LinuxSong@test ~]$?
設置二:
if [ $TERM = 'linux' ]; then
export PS1="[\[\e[36;1m\]\u@\h\[\e[31;1m\]\w\[\e[32;1m\]]> "
zhcon --utf8
clear
elif [ $TERM = "xterm" ]; then
export PS1="[\[\e[31;1m\]\w\e[0m]> "
fi
本文永久更新鏈接地址:http://www.linuxidc.com/Linux/2016-10/136597.htm
?
2、PS2——再談提示符
一個非常長的命令可以通過在末尾加“\”使其分行顯示。多行命令的默認提示符是“>”。 我們可以通過修改PS2 ,將提示符修改為"continue->" 。
ramesh@dev-db ~> myisamchk --silent --force --fast --update-state \?
> --key_buffer_size=512M --sort_buffer_size=512M \?
> --read_buffer_size=4M --write_buffer_size=4M \?
> /var/lib/mysql/bugs/*.MYI
[注: 這里使用 ">" 作為默認提示符]
ramesh@dev-db ~> export PS2="continue-> "?
ramesh@dev-db ~> myisamchk --silent --force --fast --update-state \?
continue-> --key_buffer_size=512M --sort_buffer_size=512M \?
continue-> --read_buffer_size=4M --write_buffer_size=4M \?
continue-> /var/lib/mysql/bugs/*.MYI
[注: 與上面類似,用 "continue-> " 作提示符]
當用“\”使長命令分行顯示,我發現非常易讀。當然我也見過有的人不喜歡分行顯示命令
3、PS3——Shell腳本中使用select時的提示符
你可以像下面示范的那樣,用環境變量PS3定制shell腳本的select提示:
不使用PS3的腳本輸出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | ramesh@dev-db ~> cat ps3.sh select i in mon tue wed exit do case $i in mon) echo "Monday";; tue) echo "Tuesday";; wed) echo "Wednesday";; exit) exit;; esac done ramesh@dev-db ~> ./ps3.sh 1) mon 2) tue 3) wed 4) exit #? 1 Monday #? 4 |
[注: 缺省的提示符是 #?]
使用PS3的腳本輸出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | ramesh@dev-db ~> cat ps3.sh PS3="Select a day (1-4): " select i in mon tue wed exit do case $i in mon) echo "Monday";; tue) echo "Tuesday";; wed) echo "Wednesday";; exit) exit;; esac done ramesh@dev-db ~> ./ps3.sh 1) mon 2) tue 3) wed 4) exit Select a day (1-4): 1 Monday Select a day (1-4): 4 |
[注: 設置了PS3變量后,命令提示符已經成為 "Select a day (1-4):"]
4、PS4——PS4-“set -x"用來修改跟蹤輸出的前綴
如果你像下面那樣在調試模式下的腳本中,PS4環境變量可以定制提示信息:
沒有設置PS4時的shell腳本輸出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | ramesh@dev-db ~> cat ps4.sh set –x echo "PS4 demo script" ls -l /etc/ | wc –l du -sh ~ ramesh@dev-db ~> ./ps4.sh ++ echo 'PS4 demo script' PS4 demo script ++ ls -l /etc/ ++ wc –l 243 ++ du -sh /home/ramesh 48K /home/ramesh |
[注: 當使用sex -x跟蹤輸出時的提示符為 ++]
設置PS4后的腳本輸出:
PS4在ps.sh中定義了下面兩個變量
o $0 顯示當前的腳本名?
o $LINENO 顯示的當前的行號
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | ramesh@dev-db ~> cat ps4.sh export PS4='$0.$LINENO+ ' set -x echo "PS4 demo script" ls -l /etc/ | wc -l du -sh ~ ramesh@dev-db ~> ./ps4.sh ../ps4.sh.3+ echo 'PS4 demo script' PS4 demo script ../ps4.sh.4+ ls -l /etc/ ../ps4.sh.4+ wc -l 243 ../ps4.sh.5+ du -sh /home/ramesh 48K /home/ramesh |
[注: 使用PS4后使 "{script-name}.{line-number}+" 成為set –x的命令提示符]
【編輯推薦】
- 如何在RHEL5.7下搭建和配置DHCP服務器
- Linux服務器的16個監控命令
- 服務器性能指標:撥開服務器評測體系迷霧