转自: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 | ramesh@dev-db ~> myisamchk --silent --force --fast --update-state \ |
[注: 这里使用 “>” 作为默认提示符]
1 | ramesh@dev-db ~> export PS2="continue-> " |
[注: 与上面类似,用 “continue-> “ 作提示符]
当用\
使长命令分行显示,我发现非常易读。当然我也见过有的人不喜欢分行显示命令
PS3——Shell脚本中使用select时的提示符
你可以像下面示范的那样,用环境变量PS3定制shell脚本的select提示:
不使用PS3的脚本输出:
1 | ramesh@dev-db ~> cat ps3.sh |
1 | ramesh@dev-db ~> ./ps3.sh |
[注: 缺省的提示符是 #?]
使用PS3的脚本输出:
1 | ramesh@dev-db ~> cat ps3.sh |
1 | ramesh@dev-db ~> ./ps3.sh |
[注: 设置了PS3变量后,命令提示符已经成为 “Select a day (1-4):”]
PS4——PS4-“set -x”用来修改跟踪输出的前缀
如果你像下面那样在调试模式下的脚本中,PS4环境变量可以定制提示信息:
没有设置PS4时的shell脚本输出:
1 | ramesh@dev-db ~> cat ps4.sh |
[注: 当使用sex -x跟踪输出时的提示符为 ++]
设置PS4后的脚本输出:
PS4在ps.sh中定义了下面两个变量
- $0 显示当前的脚本名
- $LINENO 显示的当前的行号[注: 使用PS4后使 “{script-name}.{line-number}+” 成为set –x的命令提示符]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15ramesh@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