很多人在用Linux时,对提示符都不太注重,能够利用好提示符可更直观地查看,利于自己的判断
Linux下有PS1 PS2 PS3 PS4 四类提示符,这四个变量都是环境变量,至于系统里有哪些环境变量,可使用命令 “env”来查看
PS1命令提示符
PS1有那些配置,或者说PS1里头都能配置些命令提示符的什么东西:
\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时,提示符为:# ,普通用户则为:$
PS1中设置字符序列颜色的格式为:\[\e[F;Bm\] 其中“F”为字体颜色,编号30~37;“B”为背景色,编号40~47。 不过呢,能设置颜色,他就肯定能够取消设置,注意:这里的取消设置,和不设置是两吗事情!取消设置:\[\e[m\]
颜色表
前景 背景 颜色
30 40 黑色
31 41 红色
32 42 绿色
33 43 黄色
34 44 蓝色
35 45 紫红色
36 46 青蓝色
37 47 白色
没有人傻乎乎的设置为白色吧.....
代码 意义
0 OFF
1 高亮显示
4 underline
7 反白显示
8 不可见
[\[\e[32m\]#\##\[\e[31m\]\[email protected]\[\e[36m\]\h \w]\$\[\e[m\]
这是我的配置
现在来看\[\e[32m\],注意:最前面的那个方括号不是用在这里的。这不就说名了要设置为绿色么,来看看我的命令提示符:[#4#[email protected]cp ~]$ 有绿色的吧。
然后#\##就是显示现在运行的是第几条命令了,看到了吧。我这里是第四条。
下来又是一个设置颜色的[\e[31m\],是设置为红色吧,这不也有红色么。[#4#[email protected]cp ~]$。呵呵
下来就是\[email protected]这是嘛意思?自己差表看去,然后不又是一个设在颜色的么(这里显示的不怎么好),
\h \w 是什么意思?\h 是说:仅取主机的第一个名字,\w是说:显示完整的路径,但是不知到为什么家他显示~而不是绝对路径。
在下来不是一个 ] 么 。开头不有一个 [ 么。这两个刚好搭配在一起的。
然后最的这个 \[\e[m\] 使用来关闭颜色设置的。要是你没有这个的话;那么,你的命令提示符,包括你通过命令提示符输出的东西都是和最后一次的颜色设置相同(除了一些有特殊意义的文件 )。
在用户的根目录下的 ".bashrc" 注意前面有个"." 表示是隐藏的。
在里头的最后一行加上:
PS1=‘[\[\e[32m\]#\##\[\e[31m\]\[email protected]\[\e[36m\]\h \w]\$\[\e[m\]‘
然后保存。然后 source .bashrc
PS2——再谈提示符
一个非常长的命令可以通过在末尾加“\”使其分行显示。多行命令的默认提示符是“>”。 我们可以通过修改PS2 ,将提示符修改为"continue->" 。
[email protected] ~> 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
[注: 这里使用 ">" 作为默认提示符]
[email protected] ~> export PS2="continue-> "
[email protected] ~> 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 |
[email protected] ~> 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 [email protected] ~> ./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 |
[email protected] ~> 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 [email protected] ~> ./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 |
[email protected] ~> cat ps4.sh set –x echo "PS4 demo script" ls -l /etc/ | wc –l du -sh ~ [email protected] ~> ./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 |
[email protected] ~> cat ps4.sh export PS4=‘$0.$LINENO+ ‘ set -x echo "PS4 demo script" ls -l /etc/ | wc -l du -sh ~ [email protected] ~> ./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的命令提示符]