실행하면 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 ::'
$