从 Windows UI 启动的 Bash 终端具有无效的 `!::=::\` 变量集

从 Windows UI 启动的 Bash 终端具有无效的 `!::=::\` 变量集

当我运行时,printenv返回的变量之一是!::=::\。我注意到该变量存在,因为docker在设置它的情况下无法正常工作。

$ printenv | grep ::
!::=::\

$ docker stack deploy keycloak -c keycloak.yml
unexpected environment "=::=::\\"

只有当我的终端从图形界面启动时,此变量才存在。如果我从另一个终端手动启动同一进程,则该变量不存在。

无法在 bash 中取消设置该变量。

$ unset !::
bash: :: unrecognized history modifier

$ unset \!::

$ env | grep ::
!::=::\

$ printenv | grep :: | cat -A
!::=::\$

$ set +H

$ unset !::

$ unset \!::

$ env | grep ::
!::=::\

如何防止!::=::\使用开始菜单启动终端时创建环境变量?

该变量在 Git-bash(Msys)和 MSys2 中都存在。

答案1

Docker 帖子中已经报道过此问题
在 Windows 上使用 CLI v23+ 从 cmd.exe 运行时,docker stack deploy 失败 #4078

解释是,当您从图形界面运行命令时,它会隐式调用cmd.exe,这意味着它还继承了 CMD 的环境。

一位用户提供了该文章的链接 这些奇怪的 =C: 环境变量是什么? 在哪里可以找到解释:

cmd.exe基本上保留了名称为空白的特殊环境变量以支持旧的 MS-DOS 功能。这些是 Docker 遇到的环境变量。

本着这种精神,另一位用户建议将错误消息从“意外的环境......”更改为“意外的环境变量......”。

相关内容