Wetts's blog

Stay Hungry, Stay Foolish.

0%

Linux-配置-PS1、PS2、PS3、PS4

转自:http://os.51cto.com/art/201205/334954.htm

PS1——默认提示符

如下所示,可以通过修改Linux下的默认提示符,使其更加实用。在下面的例子中,默认的PS1的值是\s-\v\$,显示出了shell的名称的版本。我们通过修改,可以使其显示用户名、主机名和当前工作目录。

  • \d :代表日期,格式为weekday month date,例如:”Mon Aug 1”
  • \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时,提示符为:# ,普通用户则为:$
前景 背景 颜色
30 40 黑色
31 41 红色
32 42 绿色
33 43 黄色
34 44 蓝色
35 45 紫红色
36 46 青蓝色
37 47 白色

\[\e[37;40m\][\[\e[32;40m\]\u\[\e[37;40m\]@\h \[\e[36;40m\]\w\[\e[0m\]]\n$
[用户名@计算机名 当前路径]

PS2——再谈提示符

一个非常长的命令可以通过在末尾加\使其分行显示。多行命令的默认提示符是>。 我们可以通过修改PS2,将提示符修改为”continue->” 。

1
2
3
4
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

[注: 这里使用 “>” 作为默认提示符]

1
2
3
4
5
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-> “ 作提示符]

当用\使长命令分行显示,我发现非常易读。当然我也见过有的人不喜欢分行显示命令

PS3——Shell脚本中使用select时的提示符

你可以像下面示范的那样,用环境变量PS3定制shell脚本的select提示:

不使用PS3的脚本输出:

1
2
3
4
5
6
7
8
9
10
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
1
2
3
4
5
6
7
8
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
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
1
2
3
4
5
6
7
8
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):”]

PS4——PS4-“set -x”用来修改跟踪输出的前缀

如果你像下面那样在调试模式下的脚本中,PS4环境变量可以定制提示信息:

没有设置PS4时的shell脚本输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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中定义了下面两个变量

  • $0 显示当前的脚本名
  • $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的命令提示符]