Bash 변수`!::=::\`를 설정 해제하는 방법은 무엇입니까? [반복하다]

Bash 변수`!::=::\`를 설정 해제하는 방법은 무엇입니까? [반복하다]

실행하면 printenv반환되는 변수 중 하나가 입니다 !::=::\. 설정 후 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 
...

내 환경:
운영 체제: ( MSys Windows기반 ) 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 ::'
$

관련 정보