![如何在超级用户模式下保留自定义 PS1?](https://linux22.com/image/58987/%E5%A6%82%E4%BD%95%E5%9C%A8%E8%B6%85%E7%BA%A7%E7%94%A8%E6%88%B7%E6%A8%A1%E5%BC%8F%E4%B8%8B%E4%BF%9D%E7%95%99%E8%87%AA%E5%AE%9A%E4%B9%89%20PS1%EF%BC%9F.png)
问题是这样的:
我在 .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
其主要缺点是此方法显式用作bash
shell,并且--norc
也是 bash 特定的选项。上面的sudo -Es
方法将使用$SHELL
设置的任何内容,如果您不使用bash
.
另外,使用该-E
方法时,需要确保$PS1
已导出。