(转)Linux下PS1、PS2、PS3、PS4使用详解
Linux下PS1、PS2、PS3、PS4使用详解
原文:http://www.linuxidc.com/Linux/2016-10/136597.htm
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
[注: 将命令添加到以上任何一个即可]
PS(Prompt Sign): 是指命令提示符,例如在Fedora12的终端下:[linuxidc@liutao ~]$ ,在设定PS1环境变量时,我们需要用到预设的一些特殊符号来设定PS1。
Linux中PS1设置:
在/etc/.bashrc中,找到PS1变量的定义,如果没有,手动加上:
可以将显示输出到标题栏上:
[root@elk-node1 ~]#vim /root/.bashrc
...........
export PS1="\[\e]2;\u@\H \w\a\e[32;1m\]>\[\e[0m\]"
[root@elk-node1 ~]#source /root/.bashrc
export PS1="\[\e]2;\u@\H \w\a\e[32;1m\]>\[\e[0m\]"
[root@elk-node1 ~]#. /root/.bashrc
>cd /usr/local/
>pwd
/usr/local
>
最常见的设置:
1)粉红色的
[root@elk-node1 ~]#vim /root/.bashrc
...........
export PS1="\[\e[35;1m\][\u@\h \W]$>\[\e[0m\]"
[root@elk-node1 ~]#source /root/.bashrc
[root@elk-node1 local]$>cd /usr/local/
[root@elk-node1 ~]$>cd /usr/local/
[root@elk-node1 local]$>pwd
/usr/local
[root@elk-node1 local]$>
2)绿色设置
[root@elk-node1 ~]#vim /root/.bashrc
...........
export PS1="\[\e[32;1m\][\u@\h \W]$>\[\e[0m\]"
[root@elk-node1 ~]#source /root/.bashrc
[root@elk-node1 local]$>cd /usr/local/
[root@elk-node1 ~]$>cd /usr/local/
[root@elk-node1 local]$>pwd
/usr/local
[root@elk-node1 local]$>
------------------------------------------------------------------------------------------
上面切换到显示的是当前简介路径。那么如何让linux终端命令提示符号显示全路径,而不是当前简介路径?
下面两种方法:
1)第一种方法:在/root/.bashrc文件下添加下面内容
[root@elk-node1 ~]# vim /root/.bashrc
.......
export PS1="[\u@\h \w]\$"
[root@elk-node1 ~]# source /root/.bashrc
[root@elk-node1 ~]$cd /usr/local/
[root@elk-node1 /usr/local]$ #显示的是全路径
如果将上面的内容改为export PS1="[\u@\h \w]"#,那么显示的就是#符号
[root@elk-node1 ~]# vim /root/.bashrc
.......
export PS1="[\u@\h \w]"#
[root@elk-node1 ~]# source /root/.bashrc
[root@elk-node1 ~]#cd /usr/local/
[root@elk-node1 /usr/local]##显示的是全路径
注意:默认的PS1="[\u@\h \W]\$",其中\W就是路径的设置选项,大写的W是简介模式,小写的w为全路径模式。
2)第二种方法:在/root/.bashrc文件下添加下面内容:
[root@elk-node1 ~]# vim /root/.bashrc
.......
export PS1="[\u@\h \`pwd\`]$"
[root@elk-node1 ~]# source /root/.bashrc
[root@elk-node1 ~]$cd /usr/local/
[root@elk-node1 /usr/local]$ #显示的是全路径
改为#号
[root@elk-node1 ~]# vim /root/.bashrc
.......
export PS1="[\u@\h \`pwd\`]#"
[root@elk-node1 ~]# source /root/.bashrc
[root@elk-node1 ~]$cd /usr/local/
[root@elk-node1 /usr/local]$ #显示的是全路径
-------------------------------------------------------------------------------------------------------------------------------
使用方法:
# PS1='自定义内容'
注意两边的单引号
示例: PS1='(\u@\H \d\t)\$'
----------------------------------------------------------------------------------------------------------------
PS1:就是用户平时的提示符。
PS2:第一行没输完,等待第二行输入的提示符。
Linux系统提示符是用系统变量PS1来定义的。一般系统默认的形式是:[username@host工作目录]$.
用echo $PS1可以得到PS1的值,即PS1="[\u@\h \w]"\$
登录后可以更改PS1的显示样式,但是当退出重启登录进入系统后,样式又变成系统默认的样式了,如果要彻底改变它的样式,只能从配置文件中改。
PS是在用户根目录下的.bash_profile中定义的。
如:
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startupprograms
#以下是设定的PS1的值
PS1="[\u@\h \w]\$"
PATH=$PATH:$HOME/bin
#使用export把PS1输出,以使它可以在子shell中生效,这会造成ROOT用户的也采用此样式
#export PS1 要慎用
export PATH
unset USERNAME
下面简单说说环境下默认的特殊符号所代表的意义:
\d :代表日期,格式为weekday month date,例如:"Mon Aug1"
\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变量使提示符成为彩色。在PS1中设置字符序列颜色的格式为:
\[\e[F;Bm\]
其中``F''为字体颜色,编号30~37;``B''为背景色,编号40~47。
可通过``\e[0m''关闭颜色输出;特别的,当B为1时,将显示加亮加粗的文字,详细请看下面的颜色表与代码表。
颜色表
前景 背景 颜色
---------------------------------------
30 40 黑色
31 41 红色
32 42 绿色
33 43 黃色
34 44 蓝色
35 45 紫紅色
36 46 青蓝色
37 47 白色
代码 意义
-------------------------
0 OFF
1 高亮显示
4 underline
5 闪烁
7 反白显示
8 不可见
如果想要设置终端提示符的样式只要把$PS1在~/.bahrc指定即可比,比如我的设置如下:
设置一:
PS1="\[\e[32m\][\u@\h \w]$\[\e[m\]"
export PS1
效果:
[LinuxSong@test ~]$
设置二:
if [ $TERM = 'linux' ]; then
export PS1="[\[\e[36;1m\]\u@\h\[\e[31;1m\]\w\[\e[32;1m\]]> "
zhcon --utf8
clear
elif [ $TERM = "xterm" ]; then
export PS1="[\[\e[31;1m\]\w\e[0m]> "
fi
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-10/136597.htm
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-> "
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-> " 作提示符]
当用“\”使长命令分行显示,我发现非常易读。当然我也见过有的人不喜欢分行显示命令
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的脚本输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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 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):"]
4、PS4——PS4-“set -x"用来修改跟踪输出的前缀
如果你像下面那样在调试模式下的脚本中,PS4环境变量可以定制提示信息:
没有设置PS4时的shell脚本输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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 显示的当前的行号
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的命令提示符]
【编辑推荐】
- 如何在RHEL5.7下搭建和配置DHCP服务器
- Linux服务器的16个监控命令
- 服务器性能指标:拨开服务器评测体系迷雾