Windows 和 Git Bash:Bash PATH 读取 Windows %PATH% 系统变量

Windows 和 Git Bash:Bash PATH 读取 Windows %PATH% 系统变量

我最近通过进入控制面板->系统->高级系统设置->环境变量->用户变量->PATH 手动将目录添加到 Windows PATH。(Windows 7,64 位。)

重新启动并启动 cmd.exe 后,echo %PATH%表明这有效:我在输出中看到了我最近添加的目录。

但是,启动Git Bash后,的输出echo $PATH不包含该目录。

我可以export PATH=$PATH:/c/my/path在 bashrc 中添加,但我更希望 Git Bash 只从 Windows 获取 PATH,这样我就不必记住添加两个地方的路径。如何实现?

(一个更普遍的相关问题是,如何设置 Git Bash 的$PATH?我看到几个条目在不同的地方重复出现,Windows 中的一些内容%PATH%在 Git Bash 中也有$PATH,但其他的则没有。在我得到触及的 Git Bash 提示之前发生了什么$PATH?)

答案1

mingw64 git bash 会话使用可执行文件/usr/bin/bash.exe,它不会访问或修改环境变量PATH(就像在例如这个不相关的 vbs 脚本

git bash 会话只会在当前前面添加PATH

/mingw64/bin:/usr/bin:

使用 msysgit 打包的 mingW64 会话可能不会考虑bin来自另一个 mingw 安装的:您可以通过将另一个(更简单的)目录设置为您的目录来检查它PATH,并查看它是否仍然在您的 git bash 会话中可见。如果不是,那么这是一个更普遍的问题,涉及全部您要添加到 PATH 的目录。

答案2

这是我针对类似问题(Windows 10 上的 MSYS2 bash)的小解决方法。

其想法是将所需的路径转换为 ​​Unix 风格的路径并将其附加到 bash $PATH,所有这些都在 .bashrc 中完成。

不要将所需路径附加到 Win PATH。而是在 Windows 中创建一个新的环境变量,如 MSYS2_WINPATH,并将所有以分号分隔的 Windows 路径目录附加到此变量。将 %MSYS2_WINPATH% 附加到 %PATH%。

现在将其插入到你的 .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 #################################

答案3

如果用户的 PATH 变量连接到环境 PATH 变量之后 PATH 值太长,Windows 将无法连接用户 PATH 变量。

在安装新软件并将某些内容添加到 PATH 后,很容易发生这种情况,从而破坏现有安装的软件。Windows 失败!

最好的解决方法是编辑控制面板中的一个 PATH 变量并删除不需要的条目。然后打开一个新的 CMD 窗口并查看“echo %PATH%”中是否显示了所有条目。

答案4

尝试将目录移动到路径变量的开头。安装 p4merge 后,我遇到了与您相同的问题。perforce 目录已添加到路径中,cmd.exe 找到了 p4merge,但 git shell (mingw) 却找不到。在徒劳无功的搜索之后,我尝试编辑变量,使 perforce 目录首先出现在我的路径中。我启动了 git shell,瞧,目录包含在 的输出中$ echo $path,然后$ p4merge打开 p4merge。

这是一个蹩脚的答案,因为我不知道它为什么有效,但如果这个解决方法能帮助别人,那就太好了。

相关内容