写在开始之前(环境介绍):
其实没什么配置之前拿来撘路由环境的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不认为这是命令结束,而是被单引号包围的回车,直到另外一个单引号出现 也许这个设置并没有什么用,但是如果想在每条命令的输出之间加上一个回车,以便更好的区分每条执行结果,把结尾的回车加在开始就可以了,还可以多加几个。(设置在下面)虽然 \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]$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,那么会怎样,未完。。。。。