Show only current directory name (not full path) on bash prompt
Rise to the top 3% as a developer or hire one of them at Toptal: https://topt.al/25cXVn
--------------------------------------------------
Music by Eric Matyas
https://www.soundimage.org
Track title: Romantic Lands Beckon
--
Chapters
00:00 Show Only Current Directory Name (Not Full Path) On Bash Prompt
00:35 Accepted Answer Score 192
01:48 Answer 2 Score 31
02:10 Answer 3 Score 9
02:49 Answer 4 Score 4
03:34 Thank you
--
Full question
https://superuser.com/questions/60555/sh...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#linux #commandline #bash #bashrc
#avk47
ACCEPTED ANSWER
Score 192
Change the \w
(lowercase) to \W
(uppercase):
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]\$ '
^^
this one waaaaaay over here ------------------------------------------------+
Have a look at the Bash Prompt HOWTO for lots of fun details. example:
user@host:/usr/local/bin$ echo $PS1
${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$
user@host:/usr/local/bin$ export PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\W\[\033[00m\]\$ '
user@host:bin$
The PROMPT_COMMAND
variable, if set, is a command that gets run before displaying the prompt specified in PS1
. In your case, PROMPT_COMMAND
runs an echo
statement with certain ANSI escape sequences that manipulate the titlebar of an Xterm.
If you suspect your PROMPT_COMMAND
is overriding your PS1
prompt, you can unset
it and test things out:
$ unset PROMPT_COMMAND
Finally, be sure that you're changing the PS1
definition that actually gets used. Common locations are /etc/bash.bashrc
, /etc/profile
, ~/.bashrc
, ~/.bash_profile
, ~/.profile
. The system files are generally (but not always) run before the user files.
ANSWER 2
Score 31
Simple bash replace command is
${VAR/pattern_to_find/pattern_to_replace}
For showing the last directory you can just do ${PWD/*\//}
, i.e. find any thing before and including the last '/
' and replace it with nothing.
On my ubuntu machine I use:
export PS1='$(whoami):${PWD/*\//}#'.
ANSWER 3
Score 9
My solution is to show the top three and bottom 2 directories when there are more than 5
So my prompt (which has other info too) looks like:
08:38:42 durrantm U2017 /home/durrantm/Dropbox/_/rails/everquote
when my pwd is actually
/home/durrantm/Dropbox/93_2016/work/code/ruby__rails/rails/everquote
My PS1 prompt is setup as follows:
HOST='\[\033[02;36m\]\h'; HOST=' '$HOST
TIME='\[\033[01;31m\]\t \[\033[01;32m\]'
LOCATION=' \[\033[01;34m\]`pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#\1_\2#g"`'
BRANCH=' \[\033[00;33m\]$(git_branch)\[\033[00m\]\n\$ '
PS1=$TIME$USER$HOST$LOCATION$BRANCH
git_branch
is a function which shows current git branch, I keep it in my dotfiles, it is:
git_branch () {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
}
ANSWER 4
Score 4
My solution for this is slightly different in regards to how do I export it, so thought I'd share it here:
Create another prompt string variable; PS5 and export the following string in your .profile
/ .bash_profile
file:
\u: Display the current username .
\W: Print the base of current working directory.
# Display username and current directory only.
export PS5='export PS1="\u:\W$";';
Now whenever you need to use the shorthand-ed PS, just run: eval $PS5
Or even better yet, create an alias in your .bash_aliases
file: (thanks to @muru)
alias PS5='export PS1="\u:\W$";';
source
again, and now you can just type PS5
to switch.