Bash shell允许用户在提示符中使用以下转义符号:
转义符号
|
意义
|
\a
|
响铃(ASCII 0x07)
|
\d
|
日期(格式:星期 月 日)
|
\D{format}
|
以指定格式显示当前日期(格式字符串将传递给strftime()函数,若为空则使用本机标准格式)
|
\e
|
ESC,(ASCII 0x1B)
|
\h
|
本机名称(从左至右直到遇到'.')
|
\H
|
本机名称
|
\j
|
shell当前正在处理任务号
|
\l
|
shell终端设备基本名称
|
\n
|
换行(ASCII 0x0A)
|
\r
|
回车(ASCII 0x0D)
|
\s
|
shell名,$0的基本名
|
\t
|
当前时间,24小时制,格式为HH:MM:SS
|
\T
|
当前时间,12小时制,格式为HH:MM:SS
|
\@
|
当前时间,12小时制,格式为HH:MM am|pm
|
\A
|
当前时间,24小时制,格式为HH:MM
|
\u
|
当前用户名
|
\v
|
Bash版本
|
\V
|
Bash发行号(版本+补丁级别)
|
\w
|
当前路径,$HOME将会被缩写为'~'
|
\W
|
当前路径的基本名(最后一级文件夹),$HOME处理同上
|
\!
|
当前命令的命令历史记录编号
|
\#
|
当前命令的编号
|
\$
|
如果当前用户ID为0(超级用户),则显示'#';否则显示'$'
|
\nnn
|
八进制数值nnn对应的ASCII字符
|
\\
|
反斜杠'\'
|
\[
|
标识不打印字符串的开始
|
\]
|
标识不打印字符串的结束
|
attr控制文字的修饰效果(终端并一定全部支持)
|
0:默认; 1:加亮; 2:变暗; 4:下划线; 5:闪烁; 7:反色显示; 8:隐藏文字; 9:删除线
|
fgcolor控制文本颜色
|
30:黑色; 31:红色; 32:绿色; 33:黄色; 34:蓝色; 35:紫色; 36:青色; 37:白色
|
bgcolor控制文本颜色
|
40:黑色; 41:红色; 42:绿色; 43:黄色; 44:蓝色; 45:紫色; 46:青色; 47:白色
|
显示属性/前景色/背景色定义在不同的数值区间,这样作的好处是不用显示指明颜色的作用域,系统也会从颜色数值推断出用户想要设置的究竟是属性/前景色/背景色。例如,'\e[9;41m'是要设置显示属性和背景色,保持前景色不变;'\e34m‘仅设置前景色。
#!/bin/bash for attr in 0 1 2 4 5 7 8 9; do for fgcolor in 30 31 32 33 34 35 36 37; do for bgcolor in 40 41 42 43 44 45 46 47; do printf '\e[%s;%s;%sm %1s;%02s;%02s ' $attr $fgcolor $bgcolor $attr $fgcolor $bgcolor done printf '\e[0;37;40m\n' done printf '\n' done
转义序列 | 跳转位置 |
\033[(L);(C)H \033[(L);(C)f |
跳转至第L行第C列 |
\033[(N)A | 光标向上移动n行 |
\033[(N)B | 光标向下移动n行 |
\033[(N)C | 光标向前移动n列 |
\033[(N)D | 光标向后移动n列 |
\033[2J | 清除屏幕并移动至(0,0) |
\033[K | 删除至行尾 |
\033[s | 保存光标当前位置 |
\033[u | 恢复光标至保存位置 |
export PS1='\[\e[0;32m\][\u@\h \w \$]\[\e[m\]'
PS2控制终端中命令延续行的格式,一般系统默认为单字符'>'。和PS1一样,可以使用字符/预定义转义字符/转义序列等进行定制。
export PS2='\[\e[0;32m\]~>\[\e[m\]'
其中~>为我们的PS2的设置,它替换了一般意义上默认的'>'。
[user @ dir] $ cat ps3test.sh select i in mon tue wed thu fri exit do case $i in mon) echo "Monday";; tue) echo "Tuesday";; wed) echo "Wednesday";; thu) echo "Thusday";; fri) echo "Friday";; exit) exit;; esac done [user @ dir] $ ./ps3test.sh 1) mon 2) tue 3) wed 4) thu 5) fri 6) exit #? 6 [user @ dir] $ export PS3='Enter your choice: ' [user @ dir] $ ./ps3test.sh 1) mon 2) tue 3) wed 4) thu 5) fri 6) exit Enter your choice: 6
[user @ dir] $ cat ps4test.sh #!/bin/bash export PS4='\[\e[0;37;44m\]$LINENO@$0:\[\e[m\]' set -x ls -l ~ | wc -l du -s ~/Music [user @ dir] $ ./ps4test.sh 5@./ps4test.sh:ls -l /home/user 5@./ps4test.sh:wc -l 13 6@./ps4test.sh:du -s /home/user/Music 4 /home/user/Music
http://linuxconfig.org/Bash_prompt_basics
http://www.thegeekstuff.com/2008/09/bash-shell-take-control-of-ps1-ps2-ps3-ps4-and-prompt_command/