如何在超级用户模式下保留自定义 PS1?

如何在超级用户模式下保留自定义 PS1?

问题是这样的:

我在 .bashrc 中设置了自定义项PS1,但当我进入超级用户模式时,它会更改为默认值。

我所期望的:

╓[coffee]─[Linux-Tower]─[2014-11-05, 23:41]─[~]
╙[$]-[sudo su
[sudo] password for coffee: 
╓[root]─[Linux-Tower]─[2014-11-05, 23:41]─[~]
╙[#]-[

我得到了什么:

╓[coffee]─[Linux-Tower]─[2014-11-05, 23:41]─[~]
╙[$]-[sudo su
[sudo] password for coffee: 
root@Linux-Tower:/home#

那么,我如何设置PS1为以 root 身份运行时所使用的内容呢?

答案1

不要使用sudo su.这su是毫无意义的,因为你已经通过使用成为 root 了sudo

代替使用sudo -Es。这将保护环境。然而有一个问题。因为 shell 是以交互方式启动的,所以它将访问 source ~/.bashrc,这可能会重置$PS1。但是$HOME会被保留,因此 bash 在查找时将使用您的主目录.bashrc,而不是 root 的主目录。因此您的个人资料将被使用。

但这确实有一个可能的问题。如前所述,$HOME设置为您用户的主目录,因此任何在其中创建文件的命令都$HOME/将以 root 身份创建它们。不过,如果文件已经存在并且只是被覆盖,这并不重要。

 

如果你真的想保留$PS1,你可以这样做,但它并不那么干净:

sudo -E bash --norc

或者

sudo PS1="$PS1" bash --norc

其主要缺点是此方法显式用作bashshell,并且--norc也是 bash 特定的选项。上面的sudo -Es方法将使用$SHELL设置的任何内容,如果您不使用bash.
另外,使用该-E方法时,需要确保$PS1已导出。

相关内容