天天看點

Linux下PS1、PS2、PS3、PS4使用詳解

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

[注: 将指令添加到以上任何一個即可]

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-> " 

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的腳本輸出:

20

PS3="Select a day (1-4): "

Select a day (1-4): 1

Select a day (1-4): 4

[注: 設定了PS3變量後,指令提示符已經成為 "Select a day (1-4):"]

4、PS4——PS4-“set -x"用來修改跟蹤輸出的字首

如果你像下面那樣在調試模式下的腳本中,PS4環境變量可以定制提示資訊:

沒有設定PS4時的shell腳本輸出:

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 顯示的目前的行号

export PS4='$0.$LINENO+ '

set -x

ls -l /etc/ | wc -l

du -sh ~

../ps4.sh.3+ echo 'PS4 demo script'

../ps4.sh.4+ ls -l /etc/

../ps4.sh.4+ wc -l

../ps4.sh.5+ du -sh /home/ramesh

[注: 使用PS4後使 "{script-name}.{line-number}+" 成為set –x的指令提示符]

繼續閱讀