以root身份运行时更改bash提示的行为


16

在单击之前,这不是典型的“如何使bash提示具有颜色”问题。我已经自定义了bash提示符,如下所示:

[user @ host]----[$(pwd)]
$ 

通过将以下内容添加到我的〜/ .bashrc文件中,括号中的所有内容均为浅蓝色,其他所有内容(包括$)均为黑色

# Turn the prompt symbol red if the user is root
if [ $(id -u) -eq 0 ];
then # you are root, make the prompt red
    PS1="[\e[01;34m\u @ \h\e[00m]----[\e[01;34m$(pwd)\e[00m]\n\e[01;31m#\e[00m "
else
    PS1="[\e[01;34m\u @ \h\e[00m]----[\e[01;34m$(pwd)\e[00m]\n$ "
fi

目的是使它在我使用'sudo su'时唯一改变的是将黑色$变成红色#。我查看了/etc/bash.bashrc和/ etc / profile中的内容,看看是否只有一行需要注释掉,但是关于debian_chroot的很多东西我都不了解,我也不想搞砸了 我该如何完成我想要的?

PS这就是我希望提示符看起来像root

[user @ host]----[$(pwd)]
(red)#

编辑:标记为已解决,在root完成我的目标的同时,将上述代码附加到〜/ .bashrc。另外,在上面的代码中,$(pwd)仅显示主目录(我想是因为打开终端时这是工作目录),并且从不更新。用\ w替换$(pwd)可以解决此问题,但是将主目录显示为~,这是我试图避免的。


您使用的是$ pwd还是$ PWD?
belacqua 2013年

由于您没有告诉bash您正在使用不可打印的字符,因此无法正确换行。附上非打印字符,如\e[01;31m\[...\]。在手册的“促进”下对此进行了说明。另请参见mywiki.wooledge.org/BashFAQ/053
geirha,2013年

pwd在提示中不起作用的原因是,您需要转义美元符号,否则$(pwd)将在内容放入$ PS1 之前执行。您可以使用进行测试: PS1="\$(pwd) "
F-3000

Answers:


12

这也取决于您如何成为root用户。如果您使用的是类似su - root或的内容sudo -i,则需要在root用户的.bashrc中进行更改,在环境中进行读取。

使用sudo -s,您应该阅读自己的.bashrc。

考虑添加一些printf或echo语句来调试代码,以告诉您何时执行。

使用id命令来确保您是自己的真实身份:

root@tau:~# id
uid=0(root) gid=0(root) groups=0(root)

我正在使用sudo su
zmitchell 2013年

1
sudo su读取〜root / .bashrc(至少与当前在我的13.04系统上实现的一样)。
belacqua 2013年

3

要将提示的颜色更改为红色(对于root用户),我.bashrc按照该线程中的示例修改了文件。

regularuser@myubuntubox:~$ sudo su - 
root@myubuntubox:~# vim .bashrc

然后,在vim中,搜索PS1赋值的最终外观,并将其添加到它的后面(请注意,它会更新的值,$PS1从而无需修改其他先前的行,并且更改很容易恢复):

# Set RED prompt
PS1="\[\e[01;31m\]$PS1\[\e[00m\]"

2

遵循belacqua的有效答案/ubuntu//a/305053/12218,通过发出sudo su来加载根的.bashrc。

您可以通过发出此命令进行检查,sudo su随后cd ~您将看到您位于root的主目录中。

使用sudo su您以root用户身份登录(su =切换用户),而不是以
sudo do some administrative task具有提升特权的用户身份登录。

因此,通过使用,sudo su您将成为实际的根,而对环境所做的更改是专门针对根进行的更改,即:sudo su后跟vim .bashrc


0

以下可能会有所帮助

export PS1='`[ $(id -u) == "0" ] && echo "#" || echo ">"` '

这将显示'> '给普通用户和'# 'root用户。这仍然也需要扎根.bashrc


可以完成类似的操作\$,显示#是否为root或$其他。\$虽然不是可自定义的,但它不是很有用。
上尉曼
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.