命令提示符的几种设置

xiaoxiao2021-02-28  63

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

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

其实没什么配置之前拿来撘路由环境的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,那么会怎样,未完。。。。。

转载请注明原文地址: https://www.6miu.com/read-56913.html

最新回复(0)