为什么我的 git bash (mingw64) 使用 -c 选项时会运行无意义的命令?

为什么我的 git bash (mingw64) 使用 -c 选项时会运行无意义的命令?

我现在使用 git bash 时遇到了这个问题:

C:\>bash -c pwd
C:\Program Files\Git\bin\bash.exe: line 1: $'MZ\220\003': command not found
/c

当我使用调试选项时,我得到了以下信息:

C:\>bash -x -c pwd
+ $'MZ\220\003'
C:\Program Files\Git\bin\bash.exe: line 1: $'MZ\220\003': command not found
+ pwd
/c

是什么原因导致这个附加$'MZ\220\003'命令被执行?

这是我的情况:

  • 从以下位置安装 git bashhttps://git-scm.com/download/win
  • 将“C:\Program Files\Git\bin”添加到我的路径中,位于“Windows\System32”上方,以覆盖其中的 bash
  • 我可以确认我的 cmd 会话中的 bash 使用的是 git 版本
  • 我看不到任何可以添加到此命令中的 .bashrc、.profile 或 .bash_login 条目
  • 我有另一台具有相同设置的独立 Windows 机器,该命令在那里运行良好

答案1

问题已解决。不确定这是否会对其他人有用,但我会发布我的发现。

在我的 Windows 环境变量中,我错误地将 BASH_ENV 设置为我正在使用的 bash exe 的路径 (C:\Program files\Git\bin\bash.exe)。所以我认为发生的事情是:

  1. bash -c pwd我在 cmd 中运行命令
  2. cmd 找到 git bash exe
  3. git bash exe 运行并尝试从 BASH_ENV 加载变量
  4. 它找到一条通往自身的路径并尝试运行它?

MZ* .exe奇怪的是,在出错之前,它实际上尝试在多个不同的目录中查找可执行文件。 Proc mon 显示:

进程监视器截图

同时探测环境,bash exe 显示:

_=$$'MZ\220\003'

不确定这里的内部工作原理,但最终删除该环境变量解决了我的问题,我终于可以正常使用它了(唷……)

相关内容