Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

Before you click away, this isn't the typical "how do I make my bash prompt have color" question. I've already customized my bash prompt to look like this:

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

where everything in brackets is light blue, and everything else (including $) is black by adding the following to my ~/.bashrc file

# 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

The goal is to make it such that the only thing that changes when I use 'sudo su' is that the black $ changes into a red #. I've looked in /etc/bash.bashrc and /etc/profile to see if there is just a line to comment out, but there is a bunch of stuff about debian_chroot that I don't understand, and I don't want to screw something up. How can I accomplish what I want?

P.S. This is what I want the prompt to look like as root

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

edit: Mark this solved, appending the above code to ~/.bashrc while root accomplished my goal. Also, in the above code, $(pwd) only displays the home directory (I guess because that is the working directory when the terminal is opened), and never updates. Replacing $(pwd) with \w fixes this, but displays the home directory as ~, which I was trying to avoid.

share|improve this question
    
Are you using $pwd or $PWD? –  belacq Jun 7 '13 at 0:30
    
It'll fail to wrap lines correctly since you did not tell bash that you were using non-printable characters. Enclose non-printable characters, such as \e[01;31m, in \[...\]. This is explained under PROMPTING in the manual. Also see mywiki.wooledge.org/BashFAQ/053 –  geirha Jun 7 '13 at 7:39

2 Answers 2

up vote 3 down vote accepted

It will also depend on how you become the root user. You need to make the change in the root user's .bashrc if you are using something like su - root or sudo -i, where you read in the environment.

With sudo -s, you should be reading your own .bashrc.

Consider adding some printf or echo statements to debug your code, to tell you when it has executed.

Use the id command to make sure you are who you think you are:

root@tau:~# id
uid=0(root) gid=0(root) groups=0(root)
share|improve this answer
    
I'm using sudo su –  i_use_lasers Jun 6 '13 at 23:14
    
sudo su reads ~root/.bashrc (at least as currently implemented on my 13.04 system). –  belacq Jun 6 '13 at 23:22

Following belacqua's valid answer http://askubuntu.com/a/305053/12218, by issuing sudo su the root's .bashrc is loaded.

You can check this by issuing sudo su followed by cd ~ you will see that you are at root's home directory.

Using sudo su you log in as root (su = switch user) in contrary with
sudo do some administrative task as user with elevated privileges.

So by using sudo su you become the actual root and the changes made to environment are changes made specifically to root, i.e: sudo su followed by vim .bashrc.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.