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

Ahm*_*sih 34 windows shell git-bash

我最近通过进入控制面板 -> 系统 -> 高级系统设置 -> 环境变量 -> 用户变量 -> 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 中,而不是其他东西。之前发生了什么我得到了触及 $PATH 的 Git Bash 提示?)

小智 7

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

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

不要将所需的路径附加到 Win PATH。而是在 Windows 中创建一个新的 env var,如 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 #################################
Run Code Online (Sandbox Code Playgroud)


Von*_*onC 6

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

git bash 会话将简单地添加到您当前的前面PATH

/mingw64/bin:/usr/bin:
Run Code Online (Sandbox Code Playgroud)

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

  • 这似乎不正确。当我启动 git bash 时,它的路径是由某个进程设置的,该进程显然通过某个进程转换了 Windows PATH 变量。它不像添加额外的项目那么简单:';' 转换为 ':',驱动器说明符转换为目录名称,其他一些转换也在发生。在某些情况下,这种转换是错误的——我windows路径中的`"c:\Program Files\Java\jdk1.8.0_25"\bin`被转换为`/c/Program Files/Java/jdk1.8.0_25"/ bi` 在 git bash 路径中(注意缺少第一个和最后一个字符)......所以问题是,这是怎么发生的? (3认同)