Arquivos .rc baseados em projeto com ganchos ZSH

Um dos recursos não descobertos que você pode encontrar em seu z-shell, provavelmente mais ainda ao usar um framework zsh como oh-my-zsh ou qualquer outro, já que nesses casos, dificilmente resta qualquer configuração para fazer por você. Eu encontrei muitas joias anteriormente intocadas ou desconhecidas enquanto vasculhava o manual zsh (por mais terrivelmente indigestível que possa ser às vezes, especialmente para iniciantes (shell)) que eu não tinha ideia que fosse possível.

Este na verdade está te encarando bem na cara ao usar algo como zsh, mas descobri que não dei nenhuma atenção realmente até que tive tempo de ler sobre coisas como como funciona a sintaxe do prompt (que é um caso especial, de claro, uma vez que tem que lidar com coisas como personagens invisíveis e o lugar que eles consomem na tela). Ao usar um tema oh-my-zsh, você notará que ele frequentemente (dependendo do tema) é reconhecido ao entrar em um projeto Ruby ou em um .gitdiretório habilitado (repo).

Isso se deve ao poder dos ganchos zsh, e um dos mais potentes é o chpwdque dispara cada vez – você adivinhou certo – você CHange Present Working Directory lido quando você cd a/path/somewhere. Então, não é preciso ser um gênio para descobrir que você pode facilmente criar um .customrcarquivo que coloque certas variáveis ​​de ambiente específicas do projeto em seu shell. Isso evita ter que manter qualquer outra coisa (bem, não completamente, mas pode se você carregar ~/.zshrcautomaticamente o resto) no arquivo além de:

function chpwd {
DIRECTORY
="$PWD"
while true
do
if [ -f './.env.rc' ]; then
source
'./.env.rc'
break
fi
if [ -f './env' ]; then
source
'./env'
break
fi
[ $PWD = '/' ] && break
cd
-q ..
done
cd
-q "$DIRECTORY"
}

E, claro, existem inúmeras outras variações imagináveis ​​de como isso poderia beneficiar você e quaisquer colegas de projeto sem ter que escrever um script de bootstrap que canaliza o stdout e outros daqueles anti-padrões shenanigan realmente. Eles ocupam recursos de memória preciosos em cada instância de geração de shell, o que dificilmente é necessário quando você tem uma dúzia ou mais de projetos para lidar: muito caro no final. Isso só os exportará para o seu ambiente de shell quando você realmente visitar o caminho, o que normalmente ocorre quando você pretende usar a funcionalidade ou fazer o trabalho armazenado dentro dos arquivos de caminho 🙂export SOMETHING="nothing" >> .zshrc

Aproveitar.