Linux下PS1、PS2、PS3、PS4使用详解

http://www.itivy.com/linux/archive/2012/3/21/linux-ps-command.html

Linux下PS1、PS2、PS3、PS4使用详解

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

[注: 将命令添加到以上任何一个即可]

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的命令提示符]

 

 

转载于:https://www.cnblogs.com/baiyw/p/3504854.html

### 关于电源标识 PS0 至 PS4 的含义与用途 在 Linux 系统中,`PS0` 到 `PS4` 并不是传统意义上的“电源标识”,而是系统中的提示符变量。这些变量用于定义命令行界面的行为和显示样式[^3]。 #### 1. **PS0** `PS0` 是一个较少使用的提示符变量,通常用来表示命令执行前的状态或附加信息。它可以在某些特定场景下被触发,比如调试模式下的脚本运行状态展示。然而,在大多数标准配置中,`PS0` 并不会直接影响用户的交互体验。 #### 2. **PS1** `PS1` 是最常用的提示符变量之一,代表主要的命令行提示符。它的值决定了终端上每次等待用户输入时所显示的内容。例如,默认情况下可能显示为 `$` 或者更复杂的字符串,包含用户名、主机名等信息。 ```bash export PS1="\u@\h:\w\$ " ``` 上述代码可以设置 `PS1` 提示符为当前用户名称 (`\u`)、主机名 (`\h`) 和工作目录路径 (`\w`) 组合的形式。 #### 3. **PS2** `PS2` 定义了多行命令输入时的次级提示符。当一条命令跨越多个行时(通过反斜杠 `\` 实现),第二行及其后的每一行都会以前置字符作为指示标志。默认情况下通常是 `>` 符号。 ```bash echo \ > this is a multi-line command. ``` 在此例子中,“this is a multi-line command.” 被分成两行书写,而第二行之前出现了由 `PS2` 控制的 `>` 号。 #### 4. **PS3** 尽管存在名为 `PS3` 的环境变量,但在实际应用中并不常见。根据描述,如果该变量未显式设定,则会采用预设值 `"#? "` 进行替代[^1]。此特性主要用于支持 select 循环结构内的菜单选项编号: ```bash select option in "Option A" "Option B"; do case $option in "Option A") echo Selected Option A; break ;; "Option B") echo Selected Option B; break ;; esac done ``` 在这个简单的 Bash Select 示例里,如果没有自定义 `PS3` 值的话,默认会出现类似于 “#?” 的询问形式来引导用户做出选择。 #### 5. **PS4** 最后提到的是 `PS4`,这个变量的作用范围相对狭窄——仅限于追踪调试期间打印出来的每一步操作详情。具体表现为每当启用 set -x 开启跟踪之后,每一次被执行到的新指令前面都将附加上基于 PS4 设定好的模板串。 ```bash set -x export PS4='+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }' my_function() { echo Hello World! } my_function ``` 以上片段展示了如何调整 `PS4` 输出更加详细的上下文信息,包括文件位置以及函数调用关系链路等等。 --- ### 总结 综上所述,所谓的“电源标识”实际上是 Linux Shell 下的一组特殊变量(`PS0`, `PS1`, ..., `PS4`),它们各自承担着不同的职责并影响最终呈现给使用者的画面效果。值得注意的是,这里讨论的对象并非真正意义上硬件层面的概念,而是软件领域内关于交互界面定制化方面的知识点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值