내가 이해한 바에 따르면 이 정보는 ~/.zshenv
인스턴스가 시작될 때마다 zsh
획득됩니다 .
이는 다음 줄을 사용하면 ~/.zshenv
무한 회귀가 발생함을 의미합니다.
(echo "$$ $(date)" >> $HOME/.debug.zshenv)
...하위 쉘을 나타내기 때문에 다른 소스 등을 (...)
나타냅니다 . 1~/.zshenv
그래도 위에 표시된 줄은 무해합니다. AFAICT. 특히 다음을 $HOME/.debug.zshenv
사용하여 새 셸을 시작한 후에는 한 줄만 표시됩니다.
% zsh
분명히 ~/.zshenv
위 줄을 평가할 때 소스가 검색되지 않습니다. 왜 안 돼?
1 해당 표현식에는 $(date)
하위 쉘 생성도 필요합니다.
답변1
서브쉘의 의미를 잘못 이해하셨습니다. 서브셸은 완전히 새로운 프로세스가 아니라 기존 프로세스의 포크입니다.
zsh
예를 들어 명시적으로 호출하는 경우
zsh -c 'echo "$$ $(date)" >> $HOME/.debug.zshenv'
그런 다음 셸은 분기하고 호출 execve()
한 다음 완전히 새로운 셸을 시작하고 다시 초기화합니다.