How can I shorten the bash prompt's current path to one letter per directory?
Solution 1
After playing with this for a while I got the answer you require:
Add this to your .bashrc file in your home directory, exit the terminal and renter it and you will get you prompt.
PS1='$(eval "sps")$ '
sps() {
echo "$PWD" | sed -r 's|/([^/]{,2})[^/]*|/\1|g'
}
It uses the declared function sps()
to evaluate the path every time the variable PS1
which is the prompt, is displayed
ie
/ho/de/De/Ap/Ti$ pwd
/home/deth/Desktop/Apps/Tivo
/ho/de/De/Ap/Ti$
Or...if you insist on the one letter
PS1='$(eval "sps")$ '
sps() {
echo "$PWD" | sed -r 's|/(.)[^/]*|/\1|g'
}
Which displays:
/h/d/D/A/T$ pwd
/home/deth/Desktop/Apps/Tivo
/h/d/D/A/T$
Solution 2
To truncate all directory names except the last one:
PS1='$(eval "sps")$ '
sps() {
python -c "import sys; dirs = sys.argv[1].split('/'); print '/'.join(d[:1] for d in dirs[:-1]) + '/' + dirs[-1]" $PWD
}
Solution 3
shorten all names except the last one without python:
user:/h/u/D/C/current$
sps() {
echo `dirname $PWD` | sed -r 's|/(.)[^/]*|/\1|g'
}
PS1='\u:$$(eval "sps")/\W\$ '
Comments
-
Anto over 1 year
I can't remember where, but I've already seen the bash prompt's current path shortened in an interesting way: every directory contained in the path (excepted the last one) is replaced by its first letter only. For instance:
path/to/some/directory
would be shortened top/t/s/directory
.How can I reproduce that behavior ?
-
Admin about 11 yearsYou can't directly do this in
PS1
. You would need to setPS1
to contain a variable (PS1='${SHORT_PWD}\\$'
) and update that variable in$PROMPT_COMMAND
. -
Admin over 4 years@Gilles 'SO- stop being evil' sure you can do it directly, if you use double quote you need to backslash
\$()
command substitutions though
-
-
Alex over 8 yearsThanks Meer. My prompt is actually removing the
user@pc
part. How can I handle this? -
Aditya Varma over 6 yearsThis doesn't work when I change the directories?