"Johannes Schindelin via GitGitGadget" <gitgitgadget@xxxxxxxxx> writes: > On Windows, Unix-like paths like `/bin/sh` make very little sense. In > the best case, they simply don't work, in the worst case they are > misinterpreted as absolute paths that are relative to the drive > associated with the current directory. > > To that end, Git does not actually use the path `/bin/sh` that is > recorded e.g. in Unix shell scripts' hash-bang lines. Instead, as of > 776297548e (Do not use SHELL_PATH from build system in prepare_shell_cmd > on Windows, 2012-04-17), it re-interprets `/bin/sh` as "look up `sh` on > the `PATH` and use the result instead". This asks for a few naïve questions. If there is a fixed path the "git" binary was compiled for, which can be referenced with a single variable GIT_SHELL_PATH, even though on non-POSIX systems it won't be like /bin/sh, wouldn't there be a path like "C:\Program Files\Git for Windows\bin\sh" (I do not do Windows, so you may be installing somewhere completely different) and wouldn't such a path work regardless of which drive is associated with the current directory? I would actually understand that, with relocatable build where everything is relative to the installed directory, a single GIT_SHELL_PATH that is defined at the compile-time may not make much sense, and when you need to interpret a shell script, you may need to recompute the actual path, relative to the installation directory. But I wonder why the replacement shell that is spawned is searched for in PATH, not where you installed it (which of course would be different from /bin/sh). In other words, when running script that calls for "#!/bin/sh", looking for "sh" on PATH might be a workable hack, and it might even yield the same result, especially if you prepend the path you installed git and bash as part of your installation package to the user's PATH, but wouldn't it make more sense to compute it just like how "git --exec-path" is recomputed with the relocatable build? The "look on the %PATH%" strategy does not make any sense as an implementation for getting GIT_SHELL_PATH, which answers "what is the shell this instanciation of Git was built to work with?", at least to me. Maybe I am missing some knowledge on limitations on Windows and Git for Windows why it is done that way. Thanks.