56

I can print my current working dir like this

myPrompt$ pwd
/Users/me/myDir

I want my shell to look like this

/Users/me/myDir$ pwd
/Users/me/myDir

Is that possible? How can I do it?

3
  • On OS X the name of the file is .bash_profile not just .profile. That will autoload for you.
    – user81596
    Aug 21, 2014 at 21:54
  • 2
    Not quite. OSX starts login shells by default and that means that bash looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. In any case, this is really a comment and not an answer so I am converting it to one.
    – terdon
    Aug 21, 2014 at 22:03
  • If you came here looking for a way to do the opposite (i.e. stop showing working directory) you'll want PS1='\$ '
    – tir38
    Feb 8 at 15:42

7 Answers 7

73

You can use escape sequences in prompt variables.

Put this in your ~/.bashrc:

PS1='\w\$ '
7
  • 2
    thanks. I made that change. Now I see: Abrams-MacBook-Air-3:tmp abramhandler$ pwd; /Users/abramhandler/tmp Abrams-MacBook-Air-3:tmp abramhandler$ .... I want to only show the part that says "tmp" for my prompt. How do I hide the rest? I want to hide the "abramhandler" and "Abram's-MacBook-Air-3" parts
    – bernie2436
    Nov 13, 2013 at 1:00
  • 10
    @akh2103 use \W instead of \w. See the link Gilles gave you for a (short) explanation of the escape codes.
    – terdon
    Nov 13, 2013 at 1:00
  • @terdon I see the same thing with \W and \w. I am running Unix on OSX.
    – bernie2436
    Nov 13, 2013 at 1:03
  • 2
    @akh2103 if you are running OSX and using the terminal app, you should make changes to ~/.profile not .bashrc since terminal runs a login shell by default. You should also source ~/.profile or open a new terminal for the changes to take effect. Also, please edit to add more information, I can't understand what you are asking for from your last comment.
    – terdon
    Nov 13, 2013 at 1:11
  • @terdon when I run source ~/.profile it changes the path properly in the current terminal. But when I open a new terminal then I still see "abram's mac book air" etc. I tried adding source ~/.profile to both the .profile and .bashrc files but still no luck. Any ideas?
    – bernie2436
    Nov 13, 2013 at 1:14
7

Here's a one-liner for OSX. It appends the prompt you want into the profile file and then reloads the profile.

echo "PS1='\w\$ '" >> ~/.bash_profile; source ~/.bash_profile

On El Capitan you'll want to use

echo "PS1='\w\$ '" >> ~/.profile; source ~/.profile
1

Looks like an old thread but the steps below worked for me on OS X 10.9.5

  • put PS1='\w\$ ' in ~/.profile
  • if you made any changes in ~/.bashrc remove them
  • close the terminal with cmd+q
  • reopen the terminal
1
  • 1
    In my case the complete PATH is really big so I have added one more flag for next line like PS1='\w\n\$ '
    – victor
    Oct 4, 2015 at 17:58
1

For some reason '\w\$' didn't work for me but instead I did: export PS1="$(pwd) \$" and it worked.

1
  • 8
    That won’t work too well when you change directories... Mar 15, 2018 at 15:06
0

Simple solution

Open ~/.bash_profile and add the following content

# \[\e[0m\] resets the color to default color
reset_color='\[\e[0m\]'
#  \[\033[33m\] sets the color to yellow
path_color='\[\033[33m\]'
# \e[0;32m\ sets the color to green
git_clean_color='\[\e[0;32m\]'
# \e[0;31m\ sets the color to red
git_dirty_color='\[\e[0;31m\]'

# determines if the git branch you are on is clean or dirty
git_prompt ()
{
  # Is this a git directory?
  if ! git rev-parse --git-dir > /dev/null 2>&1; then
    return 0
  fi
  # Grab working branch name
  git_branch=$(git branch 2>/dev/null| sed -n '/^\*/s/^\* //p')
  # Clean or dirty branch
  if git diff --quiet 2>/dev/null >&2; then
    git_color="${git_clean_color}"
  else
    git_color="${git_dirty_color}"
  fi
  echo " [$git_color$git_branch${reset_color}]"
}

export PS1="${path_color}\w\[\e[0m\]$(git_prompt)\n"

This should:

1) Prompt the path you're in, in color: path_color.
2) Tell you which branch are you.
3) Color the name of the branch based on the status of the branch with git_clean_color 
for a clean work directory and git_dirty_color for a dirty one.
4) The brackets should stay in the default color you established in your computer.
5) Puts the prompt in the next line for readability.

You can customize the colors with this list

Sophisticated Solution

Another option is to use Git Bash Prompt, install with this. I used the option via Homebrew on Mac OS X.

git_prompt_list_themes to see the themes but I didn't like any of them.

git_prompt_color_samples to see available colors.

git_prompt_make_custom_theme [<Name of base theme>] to create a new custom theme, this should create a .git-prompt-colors.sh file.

subl ~/.git-prompt-colors.sh to open git-prompt-colors.sh and customize:

The .git-prompt-colors.sh file should look like this with my customization

    override_git_prompt_colors() {
      GIT_PROMPT_THEME_NAME="Custom"

      # Clean or dirty branch
      if git diff --quiet 2>/dev/null >&2; then
        GIT_PROMPT_BRANCH="${Green}"
      else
        GIT_PROMPT_BRANCH="${Red}"
      fi
    }

    reload_git_prompt_colors "Custom"

This answer is based on my SO answer which you can see here. Hope this helps, have a great day!

1
  • I think the OP was intending to simply display the shell's working directory. As a regular Git user I'm also using some fancy Git-aware prompt but that seems to be overkill here. Jun 8, 2020 at 22:30
0

For Python and Conda Users:

Add the following line to ~/.bashrc and run source ~/.bashrc after saving it. The following will show conda environment, username, device name, and base of current working directory. Additionally, it is colored cyan.

PS1="\e[0;36m ($CONDA_DEFAULT_ENV) \u@\h \W → \e[m "
0

My Suggestion

Put this in your ~/.bashrc:

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\](\D{%H:%M:%S})\[\033[01;34m\]:$PWD\[\033[00m\]\$ '

This will color line, and will also add time on every line (Time can be useful some time)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.