命令提示符的几种设置

本文介绍了如何在Linux环境下自定义命令提示符,包括去除提示符、在提示符下一行输入命令、在提示符上方添加空行以及显示完整工作目录。通过修改PS1环境变量在~/.bashrc或/etc/bashrc中实现个性化设置,同时探讨了特殊字符转义和解释的细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

几种命令提示符的设置实验:

写在开始之前(环境介绍):

其实没什么配置之前拿来撘路由环境的CentOS6.8,shell使用的是bash,

单纯的设置颜色,过于无聊,不重复描述了,之前的文章链接
改变命令提示符也就是改变系统变量PS1,可以进入后自行手动更改,像这样:

PS1=hello
也可以写在bash的配置文件中:

希望所有人登录有效可以写在 /etc/bashrc中,仅希望对单个用户有效,那么可以写在个人家目录的~/.bashrc中

注意:bash的文件的加载顺序为 ~/.bashrc --->  /etc/bashrc ,所以如果~/.bashrc    /etc/bashrc 同时存在对PS1的设置,后面的设置会对前面的设置产生覆盖,也就是说/etc/bashrc 的PS1赋值会最终生效.

没有提示符的提示符

这样:

命令提示符每次显示都是显示PS1中的值,将值设置为空就好了 :

PS1=
这时还是有PS1变量的,只是值为空

set |grep PS1
PS1=

或者直接删除PS1变量

unset PS1

在提示符的下面输入命令:

在命令提示符的下一行输入新命令在,可在变量中加入一个回车,将这个回车表示出来方法很多种.

PS1="[\u@\h:\w]\$\n"
这是最简单的,赋值时使用双引号或单引号,否则\不会产生转义效果
PS1='[\u@\h:\w]\$
>'
这样,回车被单引号接收,这时bash不认为这是命令结束,而是被单引号包围的回车,直到另外一个单引号出现
也许这个设置并没有什么用,但是如果想在每条命令的输出之间加上一个回车,以便更好的区分每条执行结果,把结尾的回车加在开始就可以了,还可以多加几个。(设置在下面)

在提示符上面加上空行

PS1="\n\n\n[\u@\h:\w]\$"

$PS1="
> 
> 
> [\u@\h:\w]\$"

显示当前工作目录的完整路径

虽然 \w也能达成效果但是这会失去发现新大陆的机会,设置如下:

#$PS1="\n\`pwd\`\n[\u@\h]\$"
也许这样能整洁写在阅读上

PS1=" 空行
>\ `pwd\` 执行命令输出当前工作目录,然后换行
> [\u@\h:\w]\\$" 打印其他信息

上面\$与\\$是有区别的 \$ 是对$  进行转义,\\$是对\进行转义,所以一个打印出的是$本身,一个打印出的管理员的标识符(\$具有特殊意义)

或者使用单引号 进行设置,这里最主要的是经过bash解释后赋给PS1的值是否是预期的值
但是 这里要说的是在输出PS1中的信息时会对特殊字符进行解释(反引号),但是使用双引号赋值时其中的反引号也会被解释,所以使用\转义。

懒得不想画图我用文字描述下流程吧:

$PS1="\n\`pwd\`\n[\u@\h]\\$"     赋值,使用转义\使所有带有特殊意义的字符失去特殊意义

\n`pwd`\n[\u@\h]\$  这是最终赋值给PS1的值

在命令提示符输出的时候  \n 会被解释成换行 `pwd` 会以命令执行 然后\n换行 然后解释其他定义的特殊参数 


命令提示符只要设置正确可以执行命令,这就可以将一些命令加入到PS1中了,比如当前时间,比如上一条命令的执行结果,等等

在写一个显示命令执行结果的

显示命令的执行结果

#PS1="( $? ) [\u@\h]\$" 
( 127 ) [root@localhost]$
 这样对了么,当然没有 
 [root@localhost]$PS1="( $? ) [\u@\h]\$" 
( 127 ) [root@localhost]$echo 
( 127 ) [root@localhost]$echo 
( 127 ) [root@localhost]$^C 
echo命令已经执行成功了,但是状态还是127.

#PS1="( $? ) [\u@\h]\$"( 127 ) [root@localhost]$ls这样对了么,当然没有( 127 ) [root@localhost]$PS1="( $? ) [\u@\h]\$"( 127 ) [root@localhost]$echo( 127 ) [root@localhost]$echo( 127 ) [root@localhost]$^Cecho命令已经执行成功了,但是状态还是127.

其中$? 在 赋值之前就已经被bash解释了 ,所以赋给PS1 的值应该是 (127)[\u@\h]$"

正确的在下面:

$PS1="( \$? ) [\u@\h]\\$"

不要怪我啰嗦,中午吃的有点多。

加入在PS1中加入if判断

PS1='`if [ $? = 0 ]; then echo \[\e[33m\]^_^\[\e[0m\]; else echo \[\e[31m\]O_O\[\e[0m\]; fi`[\u@\h:\w]\$'
PS1="\`if [\ $? = 0 ]; then echo \[\e[33m\]^_^\[\e[0m\]; else echo \[\e[31m\]O_O\[\e[0m\]; fi\`[\u@\h:\w]\\$"

上面两行最终效果一致,不同的是一行使用了双引号一行使用了单引号。执行效果是当前命令成功则打印笑脸失败则哭脸。

注意:不要对上面两条直接复制,网页加入了特殊不可见符号。

如果将整个脚本文件传给PS1,那么会怎样,未完。。。。。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值