Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I would like to make my terminal's command prompt shorter. Currently I am using Python 's virtualenv and virtualenvwrapper so that is causing lots of extra text to be displayed in my command prompt. I need to shorten that up to the bare minimum so I'd like to take this:

(pytutorial)sez@sez-laptop:~/.virtualenvs/nettuts/firstblog$

and ideally turn it into

(pyt)sez:~/.virtualenvs/nettuts/firstblog$

or maybe something shorter perhaps. Right now I am using Gnome Terminal 2 & bash.

Any suggestions?

share|improve this question

migrated from stackoverflow.com Dec 21 '11 at 9:35

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

up vote 10 down vote accepted

Your prompt can be set utilizing the PS1 envvar. For example to have a minimalist command prompt of '$" simply set PS1='$' in your .bashrc. Here are some good examples of setting a customized prompt

share|improve this answer
    
thanks ennuikiller – max Dec 20 '11 at 14:37

Edit your .bashrc and change the PS1 definition. See your own /etc/bashrc for an example, or see bash documentation.

share|improve this answer

I guess \u:\w\$ is what you need, where \u is your username and \w is the current working directory (\W is shorter). Modify your ~/.bashrc to change the prompt.

share|improve this answer
    
+1 ... in the middle of typing pretty much the same thing. – Chris J Dec 20 '11 at 14:04

Simply type in your terminal nano .bash_profile. Copy:

export PS1="\u@\h\w: "

Save.

share|improve this answer

We use a consistent header across all our machines, that has the full current working directory on the line (along with hostname and user), then a line break with just the current directory name and the prompt itself.

That way, you still get plenty of width and there is a clear distinction between different lines.

Its also coloured :)

export PS1="\e[0;35m[\u@\e[0;33s\h\e[0;35m \w] \e[m \n[\W]\$ "

Eg. Which would output

[myuser@myserver /home/myuser]
[myuser]$ 

Save the line in your ~/.bashrc, ~/.bash_profile or /etc/profile to make it persistent.

share|improve this answer

Inside the '$WORKON_HOME/postactivate':

case $(basename "$VIRTUAL_ENV") in
    pytutorial) VENV="pyt";;
    *) VENV="$(basename "$VIRTUAL_ENV")";;
esac
PS1="($VENV)$_OLD_VIRTUAL_PS1"

Inside the '$HOME/.bashrc':

PS1="\u:\w\$ "

This should produce the exact output you described. Of course there are different options. I highly recommend https://wiki.archlinux.org/index.php/Color_Bash_Prompt, for more info on this topic.

The 'post_activate' file runs during virtualenv startup. The case statement allows you to replace a name with another.

Other considerations:

I personally do PS1=$_OLD_VIRTUAL_PS1 in '$WORKON_HOME/postactivate' and use $(basename "$VIRTUAL_ENV") inside my PS1.

share|improve this answer

I like to have my prompt in a separate line so I don't miss the info and I always have the whole line to type:

PS1=\\u@\\h\ \\w\\n\\$\ 
share|improve this answer

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .