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.

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.

7 Answers 7

up vote 8 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

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.