実行すると、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 ::'
$