Eu tenho um script /venv/bin/activate
que define algumas variáveis de ambiente. Estou procurando uma maneira de iniciar o zsh, obter esse script e continuar com uma sessão interativa normal. Quando eu sair desta sessão, a sessão para a qual eu retornar não deve saber sobre nenhuma das alterações de ambiente que activate
fiz. Como posso invocar o zsh assim?
(Esta é praticamente a mesma pergunta que esta , exceto que estou usando zsh em vez de bash.)
Se o
activate
script definir apenas variáveis de ambiente, você poderá lê-lo em um shell e, em seguida, executar uma nova instância zsh interativa.O shell wrapper
sh
pode ser substituído por qualquer shell capaz de analisar/venv/bin/activate
, inclusivezsh
se oactivate
script for compatível com ele.Além das variáveis de ambiente, a instância interativa do zsh herdará o ID do processo e algumas outras configurações do processo, como limites de recursos (
ulimit …
) e sinais ignorados (trap '' …
). Por outro lado, as configurações do próprio shell não são preservadas: variáveis do shell (var=…
sevar
não for exportado), opções do shell (set -…
oushopt …
), atalhos de teclado, alias e definições de funções, etc.Obviamente, isso não funcionará se você
.zshrc
substituir as variáveis de ambiente definidas peloactivate
script. Essa é uma das razões pelas quais os.*shrc
arquivos não devem definir variáveis de ambiente .Usando
ZDOTDIR
Crie um diretório (possivelmente temporário) em, digamos,
~/venv_startup
que contenha dois arquivos, .zshenv e .zshrc. O arquivo .zshenv consiste emenquanto .zshrc diz
Agora, invoque zsh via
Isso diz ao zsh, “em vez de começar com a fonte dos arquivos .zshenv e .zshrc em
$HOME
, em vez disso, crie os arquivos desses nomes/venv_startup
”. Como as versões na/venv_startup
fonte são as de$HOME
qualquer maneira, o efeito líquido é que o shell será executadoentre a execução de seu zshenv e seu zshrc. Depois disso, será uma sessão interativa normal.