我在 CentOS 6.4 上。默认情况下,root 用户的提示符有#
符号,即看起来像[root@myserver ~]#
。
echo $PS1
打印出来[\u@\h \W]\$
;但如果我这样做PS1="[\u@\h \W]\$"
(这不应该改变任何东西,afaics),我最终会得到如下提示:[root@myserver ~]$
。
为什么当我尝试自己设置它时(我最终想将其更改为更有用的内容),它会按$
字面意思进行解释?几乎我能找到的每个页面(例如,如何:更改/设置 bash 自定义提示符(PS1)) 表示应该会为 root 用户\$
带来结果。#
答案1
在您的问题中,您暗示您根本没有引用该行;这显然是错误的,因为空格会将参数赋值“PS1=[\u@\h”与命令“\W]\$”分开。请意识到每个字符都很重要。
无论如何,您可能正在使用双引号(“)而不是单引号(')。当 shell 解释您输入的内容时,它们的行为非常不同。使用双引号时,它会尝试使用反斜杠/某些字符序列做一些巧妙的事情。对于这个作业,由于 \u、\h 和 \W 没有什么特别之处,因此它们保持不变;方括号可以在不同的地方具有特殊含义,但在本例中没有,因此它们也保留在原处;但由于 a$
具有多种含义,它们都是特殊的,因此该\$
序列被解释为“忽略美元符号的特殊性,并将其保留在那里”,并且该序列被替换为不再解析的单个美元符号。所有这些的结果都分配给PS1
,并且由于存在文字美元符号,而不是 shell 构造实际提示时的魔法\$
序列,因此您只会得到美元符号,而不是有效用户相关字符。实际的解析有点复杂,但这就是这个特定例子的要点。
您输入的内容:PS1="[\u@\h \W]\$ "
shell 分配的内容:PS1 <- "[\u@\h \W]$ "
您想要的内容:PS1 <- "[\u@\h \W]\$ "
您应该输入的内容:PS1='[\u@\h \W]\$ '
接下来你应该做什么:阅读类似本教程了解有关 shell 引用的更多信息。
答案2
sudo su
您是否已使用或su
以 root 身份登录切换到 root 用户?使用id
检查计算机认为您是以谁的身份登录的,因为它可能会影响您实际编辑的配置文件。
查看以下问题的答案https://askubuntu.com/questions/305052/changing-behavior-of-bash-prompt-when-functioning-as-root