sh: parse_git_branch: command not found

I have root enabled on osx El Captain. I tried some of the solution already provided on stackoverflow and supersu but couldn’t fix the error. I exported function parse_git_branch() to .bash_profile from .bash_prompt but I still get this error. I don’t know bash scripting so I have no idea what’s going on and what is to be fixed.

abhimanyuaryan at Macbook in ~
$ sudo su
sh: parse_git_branch: command not found
root at Macbook in /Users/abhimanyuaryan


  • Write a Makefile to pick up the file name automatically and create corresponding executable with same name
  • Enabling auto-completion in git bash on windows?
  • Git Bash on Windows - Where to Store and How to Invoke Bash Scripts
  • How to make a ubuntu executable and run it in my install file
  • OpenShift: Unable to log in using rhc on Windows 7
  • /mingw32/libexec/git-core/git-sh-setup: 30: Syntax error: word unexpected (expecting “)”)
  • if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi
    # Add Homebrew `/usr/local/bin` and User `~/bin` to the `$PATH`
    export PATH
    # Load the shell dotfiles, and then some:
    # * ~/.path can be used to extend `$PATH`.
    # * ~/.extra can be used for other settings you don’t want to commit.
    for file in ~/.{path,bash_prompt,exports,aliases,functions,extra}; do
      [ -r "$file" ] && source "$file"
    unset file


    # @gf3’s Sexy Bash Prompt, inspired by “Extravagant Zsh Prompt”
    # Shamelessly copied from
    # Screenshot:
    if [[ $COLORTERM = gnome-* && $TERM = xterm ]] && infocmp gnome-256color >/dev/null 2>&1; then
      export TERM=gnome-256color
    elif infocmp xterm-256color >/dev/null 2>&1; then
      export TERM=xterm-256color
    if tput setaf 1 &> /dev/null; then
      tput sgr0
      if [[ $(tput colors) -ge 256 ]] 2>/dev/null; then
        # Changed these colors to fit Solarized theme
        MAGENTA=$(tput setaf 125)
        ORANGE=$(tput setaf 166)
        GREEN=$(tput setaf 64)
        PURPLE=$(tput setaf 61)
        WHITE=$(tput setaf 244)
        MAGENTA=$(tput setaf 5)
        ORANGE=$(tput setaf 4)
        GREEN=$(tput setaf 2)
        PURPLE=$(tput setaf 1)
        WHITE=$(tput setaf 7)
      BOLD=$(tput bold)
      RESET=$(tput sgr0)
    export MAGENTA
    export ORANGE
    export GREEN
    export PURPLE
    export WHITE
    export BOLD
    export RESET
    function parse_git_dirty() {
      [[ $(git status 2> /dev/null | tail -n1) != *"working directory clean"* ]] && echo "*"
    function parse_git_branch() {
      git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/\1$(parse_git_dirty)/"
    export PS1="\[${BOLD}${MAGENTA}\]\u \[$WHITE\]at \[$ORANGE\]\h \[$WHITE\]in \[$GREEN\]\w\[$WHITE\]\$([[ -n \$(git branch 2> /dev/null) ]] && echo \" on \")\[$PURPLE\]\$(parse_git_branch)\[$WHITE\]\n\$ \[$RESET\]"
    export PS2="\[$ORANGE\]→ \[$RESET\]"

  • Shorthand for deleting the remote branch in git?
  • Granularity for creating VCS-Repositories
  • When creating a new git repository with 40,000 things, so I have to uncomment each in the COMMIT file?
  • Best practice to automatically initialize project (git + composer + bower etc.)
  • Clone is not getting all my branches from GitHub
  • Git checkout to specific directory
  • One Solution collect form web for “sh: parse_git_branch: command not found”

    The problem here is that when you do sudo su, you are changing to root but you are keeping your own profile. That profile contains a setting for the command prompt that references a bash function. But when you sudo to root, you are getting root’s shell, which is sh instead of bash – so any modifications that rely on bash configurations will not work, including the function you are referencing in your PS1.

    So, the first thing to do is to make sure that you are actually running bash instead of sh when you sudo. This is very simple – instead of running sudo su, you simply run sudo bash.

    Since sudo defaults to switching to root, you will now be running the bash shell as root, instead of just switching to the root user’s default shell.

    If you still have problems, this may be due to your .bash_profile containing a reference to the current user’s home directory, in that it points to ~ in these lines:

    for file in ~/.{path,bash_prompt,exports,aliases,functions,extra}; do
      [ -r "$file" ] && source "$file"

    When you run bash as yourself, ~ will expand to your own home directory – but when you run it as root, it will evaluate to /var/root and that’s where it will look for your files.

    There are three ways you can fix this; choose whichever one you prefer.

    1. Change your .bash_profile so that it contains the full path to your home directory instead of just the tilde
    2. Copy all the related bash files to /var/root
    3. Instead of running sudo su, do sudo su -. This will give you root’s environment instead of your own. The downside is that all your own environment modifications will not be available to you, and you will be running sh instead of bash. (In some operating systems, those are the same thing, but in others it’s not. I believe that MacOSX is one of those where sh and bash are different things.)
    Git Baby is a git and github fan, let's start git clone.