In Ubuntu 10.04 Terminal when I traverse into some long directory structure the entire path gets displayed, this leads to lot of space wastage on my terminal, where the cursor comes way over to the right. It's causing lot of Irritation. Any way to just display the base dir.

Currently - ops@ops:/media/Main320/final_code/code/office/c/practice/parsers/proj1$

Need - ops@ops:~/proj1$

I am sure it's some config change or some profile preferences change. Any one...

migrated from stackoverflow.com Sep 9 '10 at 20:57

This question came from our site for professional and enthusiast programmers.


Changing the Bash the prompt is easy. Just assign a new value to PS1:

PS1="myprompt : "

Now the new prompt will look like

myprompt :

Bash allows prompt strings to be customized by inserting a number of backslash-escaped special characters that are decoded as follows:

* \a : an ASCII bell character (07)
* \d : the date in "Weekday Month Date" format (e.g., "Tue May 26")
* \D{format} : the format is passed to strftime(3) and the result is inserted into the prompt string; an empty format results in a locale-specific time representation. The braces are required
* \e : an ASCII escape character (033)
* \h : the hostname up to the first '.'
* \H : the hostname
* \j : the number of jobs currently managed by the shell
* \l : the basename of the shell’s terminal device name
* \n : newline
* \r : carriage return
* \s : the name of the shell, the basename of $0 (the portion following the final slash)
* \t : the current time in 24-hour HH:MM:SS format
* \T : the current time in 12-hour HH:MM:SS format
* \@ : the current time in 12-hour am/pm format
* \A : the current time in 24-hour HH:MM format
* \u : the username of the current user
* \v : the version of bash (e.g., 2.00)
* \V : the release of bash, version + patch level (e.g., 2.00.0)
* \w : the current working directory, with $HOME abbreviated with a tilde
* \W : the basename of the current working directory, with $HOME abbreviated with a tilde
* \! : the history number of this command
* \# : the command number of this command
* \$ : if the effective UID is 0, a #, otherwise a $
* \nnn : the character corresponding to the octal number nnn
* \\ : a backslash
* \[ : begin a sequence of non-printing characters, which could be used to embed a terminal control sequence into the prompt
* \] : end a sequence of non-printing characters

As an example lets create a prompt string that displays today's date and hostname:

PS1="\d \h $ "

Output is like

Sun Sep 04 ubuntu $

When you are happy with your prompt string you can make it the default prompt, even after rebooting by setting the PS1 var in .bashrc

  • You can even embed commands/scripts via backticks or $(): PS1='`fortune` $'. I have mine set up so that when I'm in a git controlled directory it parses git branch to tell me which branch I'm currently in. – slebetman Sep 9 '10 at 19:34

As @nkr1pt said, you want to set PS1

PS1='\u@\h \W \$ '

Also check out setting the env variable PROMPT_COMMAND, which is a command which is run every time bash prints out a prompt. I have mine set to:

PROMPT_COMMAND='echo -ne "\e]0;$USER@${HOSTNAME%%.*}: $(pwd -P)\a"'

Obviously with USER and HOSTNAME set elsewhere. This puts a full path in your term title.


Bash 4 has a variable called PROMPT_DIRTRIM

user@host:~$ echo $PS1
user@host:~$ cd /usr/share/doc/bash/examples
dennis@emperor:/usr/share/doc/bash/examples$ PROMPT_DIRTRIM=2

which sets the minimum number of directory elements to display.


You can use symbolic link

ln -s /media/Main320/final_code/code/office/c/practice/parsers/proj1 ~/proj1
cd ~/proj1

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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