Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

As a default, the terminal prompt shows something like:

user@system:/folder1/folder2/folder3/folder4$

the deeper you go into the filesystem, the less space is left for typing in commands. Can I change this to only show something like:

>

I mean, I can just type pwd to show where I am at. ;)

share|improve this question
    
This should be a comment but I can't comment, sorry. In addition to hiding the current directory, the following PS1 value will visually seperate your bash commands nicely: export PS1="\n___" –  Hello World Apr 28 at 10:42

4 Answers 4

up vote 61 down vote accepted
export PS1='\u@\h: '

That results in oli@bert: for my prompt.

If you really want something as minimalist as you ask for, try this:

export PS1='> '

You can attach that to the end of your ~/.bashrc file to have it persist between logins.

You can also get creative with some colours. Here's what I use on my servers:

export PS1='\[\033[0;35m\]\h\[\033[0;33m\] \w\[\033[00m\]: '

Giving (it's easier to see on a full black background):

My terminals

Glossary of acceptable characters in PS1

share|improve this answer
1  
You can also have newlines (\n) as part of the prompt, so you could put all the info and the '>' on separate lines. –  ak2 Dec 9 '10 at 12:15
    
I first encountered this sort of "extreme" shell customization in msysGit, believe it or not. I was immediately converted to the world of bash. Having all the info (my current directory, the current branch checked out from the Git repo, the state of the Git index...) right there was so awesome. I plan to do something similar with the Ubuntu install I've recently put on an old laptop (alongside Windows XP). –  dgw Dec 10 '10 at 0:09
    
what is the format used for setting up the colors? –  syedrakib Apr 1 '12 at 21:16

Just to expand on Oli's answer (and so that I have a bookmark for those short-hand symbols):

The bash prompt (stefano@linux:~$) is only the first of a couple of prompts you might see,:

  • PS1: The default promt you see when you open a shell

    It's value is stored in an environment variable called PS1. To see its value, type

    echo $PS1

    This will give you something like

    \[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$
    

    To change it, you can set a new value for the variable:

    export PS1="\u > "
    

    This will result in a prompt like this:

    stefano > 
    
  • PS2: is your secondary prompt. This get's shown when a command is not finished. Type echo "asd and hit enter, the secondary prompt will let you enter more lines until you close the inverted commas.

  • PS3 is the prompt used for select(2)

  • PS4 is the prompt used for alt text stack traces (default: +)

To make the changes permanent, you append them to the end of .bash_profile (or .bashrc, see this question) in your home directory.

Here's a more or less complete list of shorthand that you can use when composing these:

  • \a     The 'bell' charakter
  • \A     24h Time
  • \d     Date (e.g. Tue Dec 21)
  • \e     The 'escape' charakter
  • \h     Hostname (up to the first ".")
  • \H     Hostname
  • \j     No. of jobs currently running (ps)
  • \l     Current tty
  • \n     Line feed
  • \t     Time (hh:mm:ss)
  • \T     Time (hh:mm:ss, 12h format)
  • \r     Carriage return
  • \s     Shell (i.e. bash, zsh, ksh..)
  • \u     Username
  • \v     Bash version
  • \V     Full Bash release string
  • \w     Current working directory
  • \W     Last part of the current working directory
  • \!     Current index in history
  • \#     Command index
  • \$     A "#" if you're root, else "$"
  • \\     Literal Backslash
  • \@     Time (12h format with am/pm)

You can of course insert any literal string, and any command:

export PS1="\u \$(pwd) > "

Where $(pwd) stands in place of "the output of" pwd.

  • If the command substitution is escaped, as in \$(pwd), it's evaluated every time the prompt is displayed, otherwise, as in $(pwd), it's only evaluated once when bash is started.

If you want your prompt to feature colours, you can use bash's colour codes to do it. The code consists of three parts:

40;33;01
  • The first part before the semicolon represents the text style.

    • 00=none
    • 01=bold
    • 04=underscore
    • 05=blink
    • 07=reverse
    • 08=concealed
  • The second and third part are the colour and the background color:

    • 30=black
    • 31=red
    • 32=green
    • 33=yellow
    • 34=blue
    • 35=magenta
    • 36=cyan
    • 37=white

Each part can be omitted, assuming starting on the left. i.e. "1" means bold, "1;31" means bold and red. And you would get your terminal to print in colour by escaping the instruction with \33[ and ending it with an m. 33, or 1B in hexadecimal, is the ascii sign "ESCAPE" (a special character in the ascii character set). Example:

"\33[1;31mHello World\33[m"

Prints "Hello World" in bright red.

share|improve this answer
    
I appended export PS1='\[\033[1;31m\]\w\[\033[00m\] \$> ' to /etc/bash.bashrc but nothing seemed to change... it works on a per session, but i cant seem to make it permanent. –  Jared Tritsch Nov 15 '13 at 21:10

I often want to do this temporarily. Here's what I do:

$ export OLD_PS1=$PS1                    # save Long Prompt to OLD_PS1
$ export PS1="\u > "export PS1="\u $ "   # change to PS1 to Short Prompt
$ export PS1=$OLD_PS1                    # restore Long Prompt to PS1

I hope this helps someone.

Love and peace,

Joe

share|improve this answer

Another alternative is to shorten the working directory path when it gets too long: trim the terminal command prompt working directory

Create a small python script which implements the desired trimming logic.

Example: ~/short.pwd.py

import os
from commands import getoutput
from socket import gethostname
hostname = gethostname()
username = os.environ['USER']
pwd = os.getcwd()
homedir = os.path.expanduser('~')
pwd = pwd.replace(homedir, '~', 1)
if len(pwd) > 30:
    pwd = pwd[:10]+'...'+pwd[-20:] # first 10 chars+last 20 chars
print '[%s@%s:%s] ' % (username, hostname, pwd)

Now test it, from a terminal:

export PROMPT_COMMAND='PS1="$(python ~/.short.pwd.py)"'

If you are ok with the result just append the command into your ~/.bashrc

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.