25

I've recently added a directory to the Windows PATH manually by going into Control Panel -> System -> Advanced system settings -> Environment Variables -> User variables -> PATH. (Windows 7, 64-bit.)

After rebooting and starting cmd.exe, echo %PATH% indicates that this worked: I see the directory I recently added in the output.

However, after starting Git Bash, the output of echo $PATH doesn't include this directory.

I could add export PATH=$PATH:/c/my/path in my bashrc but I'd rather Git Bash just get PATH from Windows so I don't have to remember to add paths to two places. How can this be accomplished?

(A more general related question is, what sets up Git Bash's $PATH? I see a couple of entries repeated in different places, some things that are in Windows %PATH% are in Git Bash's $PATH but not others. What all happens before I get the Git Bash prompt that touches $PATH?)

migrated from stackoverflow.com Jun 14 '13 at 7:24

This question came from our site for professional and enthusiast programmers.

  • The path in question might be important: C:\cygwin\usr\x86_64-w64-mingw32\sys-root\mingw\bin. – Ahmed Fasih Jun 13 '13 at 17:34
4

An msysgit git bash session uses the script share/WinGit/Git Bash.vbs, which doesn't access or modify the environment variable PATH (like it would in this unrelated vbs script, for instance)

A git bash session will simply add in front of your current PATH:

.:/usr/local/bin:/mingw/bin:/bin:

It is possible that the mingw session packaged with msysgit won't consider a bin from another mingw installation: you can check it by setting another (simpler) directory to your PATH and see if it is still visible in your git bash session. If not, then it is a more general issue which concerns all directories that you would add to the PATH.

  • 1
    This doesn't seem to be correct. When I start git bash, its path is set up by some process that apparently converts the Windows PATH variable through some process. It is not as simple as adding extra items: ';' is translated to ':', drive specifiers are converted to directory names, and some other conversions are happening too. In some cases, this conversion is wrong -- "c:\Program Files\Java\jdk1.8.0_25"\bin in my windows path is converted to /c/Program Files/Java/jdk1.8.0_25"/bi in the git bash path (note missing first and last character) ... so the question is, how does this happen? – Jules Mar 23 '18 at 10:27
  • @Jules That is possible indeed. A lot has changed in 5 years. – VonC Mar 23 '18 at 10:39
5

Here's my small workaround for a similar problem (MSYS2 bash on Windows 10).

The idea is to convert the required paths to Unix-style paths and append them to bash $PATH, all done in .bashrc.

Do not append required paths to Win PATH. Instead create a new env var in Windows, like MSYS2_WINPATH, and append all the semicolon-separated Windows path directories to this variable. Append %MSYS2_WINPATH% to %PATH%.

Now insert this in your .bashrc -

################################## Construct PATH variable ##################################

winpath=$(echo $MSYS2_WINPATH | tr ";" "\n" | sed -e 's/\\/\\\\/g' | xargs -I {} cygpath -u {})
unixpath=''

# Set delimiter to new line
IFS=$'\n'

for pth in $winpath; do unixpath+=$(echo $pth)":"; done

export PATH=$(echo $PATH:$unixpath | sed -e 's/:$//g')
unset IFS
unset unixpath
unset winpath

################################# Constructed PATH variable #################################
  • Tried that in git-bash and it worked without the workaround for .bashrc. Thanks! – Michael Haidl Apr 10 '18 at 6:47
  • good to hear that :) you're welcome. – anubhav Apr 10 '18 at 14:52
2

If the PATH value would be too long after your user's PATH variable has been concatenated onto the environment PATH variable, Windows will silently fail to concatenate the user PATH variable.

This can easily happen after new software is installed and adds something to PATH, thereby breaking existing installed software. Windows fail!

The best fix is to edit one of the PATH variables in the Control Panel and remove entries you don't need. Then open a new CMD window and see if all entries are shown in "echo %PATH%".

1

Try moving the directory to the beginning of your path variable. I had the same issue as you after installing p4merge. The perforce directory was added to the path and p4merge was found by cmd.exe, but not git shell (mingw). After a fruitless search, I tried just editing the variable so that the perforce directory appeared first in my path. I fired up git shell and, voila, the directory is included in the output of $ echo $path, and $ p4merge opens up p4merge.

This is kind of a lame answer, since I'm clueless as to why it works, but if the work-around helps someone else, great.

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.