Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

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...

share|improve this question

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

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

    
Please ask this here where you will likely get more specific help than you would on SuperUser. –  Nathan Osman Sep 9 '10 at 19:25
    
@george donno such a thing existed! Will do so. Thanks... –  movieyoda Sep 9 '10 at 19:47
    
possible duplicate of Code challenge: Bash prompt path shortener –  Dennis Williamson Sep 9 '10 at 20:57

4 Answers 4

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

share|improve this answer
    
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
    
@nkr1pt Cool shit! thanks... –  movieyoda Sep 9 '10 at 19:51

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.

share|improve this answer

Bash 4 has a variable called PROMPT_DIRTRIM

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

which sets the minimum number of directory elements to display.

share|improve this answer

You can use symbolic link

ln -s /media/Main320/final_code/code/office/c/practice/parsers/proj1 ~/proj1
cd ~/proj1
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.