Por que as sub-expressões em ~ / .zshenv não levam à regressão infinita?

0

Eu entendo que ~/.zshenv é originado toda vez que uma instância de zsh é iniciada.

Isso implica que ter a seguinte linha ~/.zshenv resultaria em uma regressão infinita:

(echo "$$ $(date)" >> $HOME/.debug.zshenv)

... porque o (...) representa um subshell e, portanto, outro sourcing de ~/.zshenv , etc. 1

Não obstante este raciocínio, a linha mostrada acima é inofensiva, AFAICT. Em particular, $HOME/.debug.zshenv mostra apenas uma linha depois que eu inicio um novo shell com

% zsh

Claramente, ~/.zshenv não está sendo originado novamente quando a linha acima é avaliada. Porque não?

1 Para essa questão, a expressão $(date) também envolve a criação de uma subcamada.

    
por kjo 18.01.2016 / 02:53

1 resposta

2

Você entendeu mal o significado de subshell. Uma subshell não é um processo completamente novo, mas uma bifurcação do processo existente.

Se você chamar zsh explicitamente, por exemplo,

zsh -c 'echo "$$ $(date)" >> $HOME/.debug.zshenv'

então o shell se bifurca, chama execve() e por isso inicia um shell completamente novo que faz a inicialização novamente.

    
por 18.01.2016 / 03:15

Tags