Hide current working directory in terminal
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. ;)
Solution 1:
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):
Glossary of acceptable characters in PS1
Solution 2:
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 prompt you see when you open a shell
It's value is stored in an environment variable called
PS1
. To see its value, typeecho $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 gets 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 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' character -
\A
24h Time -
\d
Date (e.g. Tue Dec 21) -
\e
The 'escape' character -
\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.
Solution 3:
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
Solution 4:
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.
Solution 5:
for macOS users:
open ~/.bash_profile
at the end of the file add the following line and save it
export PS1='\u:\w\$ '
result at home directory:
user: ~$
here u for user w for current working directory $ is to prompt to display
you can try the following styles:
export PS1='$ '
to just have $ as prompt, nothing else. just like:
$