Eu acho que seria útil / conveniente se o diretório atual determinasse o ambiente do shell. Isso significaria que o comando
cd /my/projects/foo
..., por exemplo, não apenas configuraria o diretório de trabalho atual (e atualizaria $PWD
, $OLDPWD
, $dirstack
, etc.), mas também ajustaria um host de outros elementos de ambiente (opções de shell , variáveis, funções, aliases, etc.) de maneira apropriada ao conteúdo do novo PWD
.
À primeira vista, isso parece ser algo relativamente simples de implementar, especialmente com zsh
, pois ele já suporta um chpwd
hook e a $chpwd_functions
array. Mas, como dizem, o diabo está nos detalhes 1 .
Portanto, antes de mergulhar na minha, pensei em perguntar: alguém está ciente de uma implementação madura dessa ideia?
Alternativamente, além de chpwd
et al., zsh
fornece outras ferramentas que seriam úteis para implementar tal coisa? Em particular, ele fornece algum suporte para encapsular / salvar / restaurar ambientes? (Estou pensando em algo na veia dos objetos de ambiente de R
, mas abrangendo não apenas variáveis, mas também, por exemplo, aliases, opções, etc.)
FWIW, estou ciente do virtualenv
do Python, que compartilha alguns recursos com a ideia descrita neste post, mas, claro, isso está limitado a configurações relacionadas ao Python, no entanto. Além disso, ele cria uma nova "variável de estado", se você quiser, o "ambiente virtual atual", ortogonal (em vez disso, subsumida) na variável de estado "diretório de trabalho atual".
1 Uma vez que se examina a questão com mais cuidado, rapidamente se encontram algumas questões não triviais. Por exemplo: se cd
'ing para /my/projects/foo
ativar um ambiente personalizado, o que exatamente acontece depois de cd /my/projects/foo/modules/bar
? Podemos ter ambientes personalizados aninhados, demarcados pela estrutura de árvore do sistema de arquivos? E os links simbólicos? Por exemplo, e se /my/projects/foo/modules/bar
for realmente um link simbólico para /my/shared/modules/bar
? Ou, se eu executar /my/projects/foo/some_program
enquanto $PWD
for /tmp
, digamos, qual deve ser o ambiente do processo resultante? Etc., etc., etc. Eu não acho essas perguntas necessariamente intratáveis, mas eu as acho pelo menos não-totalmente-triviais.
Tags environment-variables zsh