linux - How can I change my bash prompt on Ubuntu?
2013-12
I have one account on an Ubuntu server with the correct PS1 variable and I want to make one of my other accounts on the same server have the same PS1 variable, so that my prompt on this new account (when I ssh into the machine) is the same as the original account.
Is there a way that I can pass this PS1 variable between accounts so the prompt is the same?
I have tried printing it out, copying the output, and then reassigning it to PS1 on the new account, but it just doesn't work.
Here is what is printed when I type echo $PS1
:
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$
I want to assign that prompt (shown above) to my new account.
set
PS1=[contents]
in the .bashrc file for the user in question. For example, a typical situation for user bob would be in:
/home/bob/.bashrc
You can't just copy the output from the screen because the prompt contains terminal escape codes that get consumed by the terminal (to make color, for example). So it's not the same set of characters. You need to edit your ~/.bashrc and copy the PS1=... line from your other machine to your new one. That is, use the source. :-)
The way my bash prompt is currently configured, it shows the whole path to the current directory. This is annoying when I'm deep inside a directory tree, as the prompt becomes so long that every command wraps into the next line. How do I make it show only the last part of the path?
This is what I have in my .bashrc
:
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD/$HOME/~}\007"'
;;
*)
;;
esac
Change the \w
(lowercase) to \W
(uppercase):
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]\$ '
^^
this one waaaaaay over here ------------------------------------------------+
Have a look at the Bash Prompt HOWTO for lots of fun details. example:
user@host:/usr/local/bin$ echo $PS1
${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$
user@host:/usr/local/bin$ export PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\W\[\033[00m\]\$ '
user@host:bin$
The PROMPT_COMMAND
variable, if set, is a command that gets run before displaying the prompt specified in PS1
. In your case, PROMPT_COMMAND
runs an echo
statement with certain ANSI escape sequences that manipulate the titlebar of an Xterm.
If you suspect your PROMPT_COMMAND
is overriding your PS1
prompt, you can unset
it and test things out:
$ unset PROMPT_COMMAND
Finally, be sure that you're changing the PS1
definition that actually gets used. Common locations are /etc/bash.bashrc
, /etc/profile
, ~/.bashrc
, ~/.bash_profile
, ~/.profile
. The system files are generally (but not always) run before the user files.