适用于 Windows 的 Git:Git\bin\bash.exe 和 Git\usr\bin\bash.exe 之间的区别

Posted

技术标签:

【中文标题】适用于 Windows 的 Git:Git\\bin\\bash.exe 和 Git\\usr\\bin\\bash.exe 之间的区别【英文标题】:Git for Windows: Difference between Git\bin\bash.exe and Git\usr\bin\bash.exe适用于 Windows 的 Git:Git\bin\bash.exe 和 Git\usr\bin\bash.exe 之间的区别 【发布时间】:2019-01-14 17:17:51 【问题描述】:

据我了解 bin\bash.exe 调用 usr\bin\bash.exe 我猜想有一些选项可以帮助管理 Windows 路径,但找不到任何文档来表明这一点。

我所知道的是,如果我将环境设置为使用 Git\usr\bin\ 而不是 Git\bin,我的脚本似乎无法按预期工作。

一个新的开发盒似乎有这样的设置:

在哪里狂欢

C:\Windows\System32\bash.exe

C:\Program Files\Git\usr\bin\bash.exe

如果bin/bash.exe 是我应该使用的,我可以理解 wsl 是***但无法理解第二个条目?

【问题讨论】:

有什么用途?一般? In the install path of Git for Windows, what's the difference between ./git-bash.exe and bin/bash.exe and bin/sh.exe?的可能重复 【参考方案1】:

%windir%\system32\bash.exe = 内联 bash shell 由您使用 microsoft store 启用的任何适用于 linux [ wsl ] 环境的 windows 子系统托管 | linux的windows子系统| |安装。另一种但与启动菜单快捷方式%windir%\system32\wsl.exe ~ -d Ubuntu 启动的单独窗口基本相同的结果。

%programfiles%\git\bin\bash.exe -> %programfiles%\git\usr\bin\bash.exe + some automatically injected arguments = inline [ main stdin/stdout ] git 提供的 bash shell 位于 windows cmd.exe 命令提示符环境之上

%programfiles%\git\git-bash.exe = windows app [ winmain ] 由 git 提供的 bash shell 位于 windows cmd.exe 命令提示符环境之上

【讨论】:

感谢您的回复!正如我提到的,我的脚本似乎只有在我使用时才有效:“C:\Program Files\Git\bin\bash.exe” - 所以我想我需要了解这些“+一些自动注入的参数”是什么......是这记录在任何地方?确实查看了 git-for-windows github,但什么也没看到。 我不知道。我跑了%programfiles%\Git\bin\bash.exe,然后在进程详细信息下查看了命令行,我看到它产生了一个%programfiles%\Git\bin\..\usr\bin\bash.exe,没有任何命令行参数,所以我看到的文档中提到“+一些自动注入的参数”可能是指内部该 exe 中定义的参数给出了 1918KB 与 bin\bash.exe 为 44KB。 在我的系统上尝试运行%programfiles%\Git\usr\bin\bash.exe 直接产生输出bash: cut: command not found 并尝试使用printenv,以比较以这种方式启动与使用Git\bin\bash.exe 的环境差异,产生bash: printenv: command not found . 运行替代%programfiles%\Git\bin\git-bash.exe 我看到它产生usr\bin\mintty.exe --nodaemon -o AppID=GitForWindows.Bash -o AppLaunchCmd="%programfiles%\Git\git-bash.exe" -o AppName="Git Bash" -i "%programfiles%\Git\git-bash.exe" --store-taskbar-properties -- /usr/bin/bash --login -i 来设置新的命令窗口,然后是%programfiles%\Git\usr\bin\bash.exe layered on top of windows cmd.exe command prompt environment 是吗?它在mintty.exe 之上运行bash.exe,但它是否还涉及cmd.exe【参考方案2】:

看来:

"C:\Program Files\Git\usr\bin\bash" -li

产量:

Me@MYPC MSYS /usr/bin

"C:\Program Files\Git\bin\bash" -li

产量:

Me@MYPC MINGW64 /usr/bin

所以在我看来,这意味着 EXE 的编译方式不同。

但就我而言,我的脚本遇到的问题完全取决于每个 exe 设置的 PATH:

对于

"C:\Program Files\Git\usr\bin\bash.exe"

$ where FIND C:\Windows\System32\find.exe C:\Program Files\Git\usr\bin\find.exe

鉴于:

"C:\Program Files\Git\bin\bash.exe"

$ where FIND C:\Program Files\Git\usr\bin\find.exe C:\Windows\System32\find.exe

所以我在前一种情况下的脚本失败了

FIND: Parameter format not correct

因为它没有找到正确的 find 版本。

【讨论】:

以上是关于适用于 Windows 的 Git:Git\bin\bash.exe 和 Git\usr\bin\bash.exe 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

适用于 Windows 的 Git 不执行我的 .bashrc 文件

windows配置git

如何禁用适用于 Windows 的 Git 凭据管理器?

Git:使用适用于 Windows 的 GitHub 客户端在 PATH 中安装 Git

如何使用适用于 Windows 的 Git 更改 Git Bash 中的目录?

适用于 Windows 的 ConEmu 和 git