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): 是指命令提示符,例如在Fedora 12的终端下:[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的命令提示符]

【编辑推荐】

    1. 如何在RHEL5.7下搭建和配置DHCP服务器
    2. Linux服务器的16个监控命令
    3. 服务器性能指标:拨开服务器评测体系迷雾

(转)Linux下PS1、PS2、PS3、PS4使用详解的更多相关文章

  1. 【大数据】Linux下安装Hadoop(2.7.1)详解及WordCount运行

    一.引言 在完成了Storm的环境配置之后,想着鼓捣一下Hadoop的安装,网上面的教程好多,但是没有一个特别切合的,所以在安装的过程中还是遇到了很多的麻烦,并且最后不断的查阅资料,终于解决了问题,感 ...

  2. Linux下rz命令使用的实例详解

    Linux中rz命令和sz命令都可用于文件传输,而rz命令主要用于文件的上传,下面将通过几个实例来给大家详细介绍下Linux下rz命令的用法,一起来学习下吧. rz命令可以批量上传文件,当然也可上传单 ...

  3. linux下的mount命令的用法详解

    挂接命令(mount) 首先,介绍一下挂接(mount)命令的使用方法,mount命令参数非常多,这里主要讲一下今天我们要用到的. 命令格式:mount [-t vfstype] [-o option ...

  4. Linux下同步工具inotify+rsync使用详解

    1. rsync 1.1 什么是rsync rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.它使用所谓的“Rsync演算法”来使本地和远程两个主机之间的文件达到同步,这 ...

  5. Linux下的搜索查找命令的详解(find)

    4.find Linux下find命令在目录结构中搜索文件,并执行指定的操作.Linux下find命令提供了相当多的查找条件,功能很强大.由于find具有强大的功能,所以它的选项也很多,其中大部分选项 ...

  6. Linux下的crontab定时执行任务详解

    在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron].cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间.cron的配置文件称为“cr ...

  7. (转)Linux下同步工具inotify+rsync使用详解

    原文:https://segmentfault.com/a/1190000002427568 1. rsync 1.1 什么是rsync rsync是一个远程数据同步工具,可通过LAN/WAN快速同步 ...

  8. Linux下 CentOS 7 对比6 改动详解 及 系统安装

    系统基础服务变化 操作系统 本文CentOS7 为最新版7.5 本文CentOS6 为6.9 操作 Centos6 Centos7 对比 自动补全 只支持命令.文件名 支持命令.选项.文件名 文件系统 ...

  9. linux下easy_install的安装与使用详解

    Python中的easy_install工具用起来非常好用,它的作用类似于Php中的pear,或者Ruby中的gem,或者Perl中的cpan. 1.easy_install安装 如果想使用easy_ ...

  10. Linux下的设置静态IP命令详解

    网络配置的配置文件在/etc/sysconfig/network-scripts/下,文件名前缀为ifcfg-后面跟的就是网卡的名称,可以通过双TAB键查看然后编辑,也可以使用ifconfig查看,也 ...

随机推荐

  1. findBug 错误修改指南

      1. EC_UNRELATED_TYPESBug: Call to equals() comparing different types Pattern id: EC_UNRELATED_TYPE ...

  2. POJ3468(线段树区间维护)

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 85502   ...

  3. js函数篇

    1.闭包函数,作用:不污染全局变量,  定义:与外界隔离的独立作用域被称为闭包,使用函数实现该功能称为函数闭包: 写法: (function(){ function sayHello(){ conso ...

  4. C笔试题(二)

    /* 现在有一个数组 我们可以定义数组的子数组 如 数组 1 3 4 2 5 8 7 它的子数组可以是 1 3 4 3 4 2 5 等等 请写一个算法 找一个子数组 这个子数组递增不减少 并且是满足递 ...

  5. !important定义为最高级不可替代

    <!DOCTYPE html> /*!important定义为最高级不可替代*/ <html lang="en"> <head> <met ...

  6. 并发设计模式和锁优化以及jdk8并发新特性

    1 设计模式 (1) 单例模式 保证一个类只能一个对象实现.正常的单例模式分为懒汉式和饿汉式,饿汉式就是把单例声明称static a=new A(),系统第一次调用的时候生成(包括调用该类的其他静态资 ...

  7. 微信 python搭建服务器

    1. 搭建服务以web.py网络框,python,腾讯云服务器为例介绍. 1)安装/更新需要用到的软件 安装python2.7版本以上 安装web.py pip install web.py sudo ...

  8. mongodb创建.bat快捷方式

    1.在mongodb安装目录下找到bin文件下的mongod.exe 复制路径,然后创建startmongodb.bat文件 例如 cd C:\Program Files\MongoDB\Server ...

  9. 8、linux-数字计算

    bash内置了对整数四则运算的支持,但是并不支持浮点运算 bc命令是一种支持任意精度的交互执行的计算器语言,而bc命令可以很方便的进行浮点运算,当然整数运算也不再话下 在bc工作环境下,可以使用以下计 ...

  10. 【Sping管理bean的原理】

    spring容器默认情况下,当服务启动时,解析配置文件,实例化文件中的所有类. 我们直接使用spring时,获取spring注入的bean是这样的, ApplicationContext ctx =  ...