Bash変数`!::=::\`の設定を解除するには? [繰り返し]

Bash変数`!::=::\`の設定を解除するには? [繰り返し]

実行すると、printenv返される変数の1つがです!::=::\。設定後、dockerが正しく機能しなくなり、この変数があることがわかりました。

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

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

私はWindowsでgit-bashを使用しています。奇妙なことは、この変数が私が使用したときにのみ存在することです。一部VSCodeに組み込まれた端末を使用すると、存在しないConEmu、Window Terminal、Git-bash Terminalなどの端末エミュレータ。

この変数はなぜ存在するのですか?どのように削除しますか?

私は成功せずに次のことを試しました。

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

$ unset \!::

$ unset \!\:\:

$ echo $!::
::

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

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

$ export !::= 
bash: :: unrecognized history modifier

$ export \!::=
bash: export: `!::=`: not a valid identifier

$ export $!::=
bash: export: `::=`: not a valid identifier

$ set +H
$ unset !::
$ unset \!::
$ env | grep ::
!::=::\

以下はうまくいきます:

$ env -u \!:: env | grep::

$ env -u \!:: docker stack deploy keycloack -c keycloak.yml
Creating network keycloack_default 
...

私の環境:
オペレーティングシステム:(MSysWindowsベース)Bashバージョン:git-bash
5.2.15(1)-release

答え1

私が解決した方法は次のとおりです。.profile変数をとして識別すると、その::変数なしで新しいbashを起動するファイルが作成されました。

$ cat $HOME/.profile
if env |grep -q ::
then
        exec env -u \!:: bash
fi

ところで、私はそれがどこから来たのかを確認しようとしました。bashプロセスは親プロセス1を使用して作成されましたmintty

$ ps -p $$
      PID    PPID    PGID     WINPID   TTY         UID    STIME COMMAND
     2150    2149    2150      12536  pty1     1234897 15:34:37 /usr/bin/bash

$ ps -p 2149
      PID    PPID    PGID     WINPID   TTY         UID    STIME COMMAND
     2149       1    2149       9644  ?        1234897 15:34:37 /usr/bin/mintty

minttyプロセスは、次の環境変数を使用して生成されます。

$ grep -z :: /proc/2149/environ
!::=::\

しかし、実際にはinitプロセス(pid 1)がないので、このminttyプロセスが正確にどのように生成され、git-bashなぜこの環境変数で始まるのかはわかりません。しかし、とにかく上記の解決策は私にとって効果的でした。

答え2

なぜ存在するのかわかりませんが、次のように設定を解除できますenv -u

$ env | grep ::
!::=::
$ env -u \!:: bash -c 'env | grep ::'
$

関連情報