Ao fazer o ambiente depender do diretório atual

1

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.

    
por kjo 28.01.2017 / 18:16

0 respostas