我最近通过进入控制面板->系统->高级系统设置->环境变量->用户变量->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。
这是一个蹩脚的答案,因为我不知道它为什么有效,但如果这个解决方法能帮助别人,那就太好了。