Você pode tornar cd
uma função (e pop
e pushd
) e fazer com que ela seja detectada se você entrar nesse diretório específico.
cd () { builtin cd "$@" && chpwd; }
pushd () { builtin pushd "$@" && chpwd; }
popd () { builtin popd "$@" && chpwd; }
unset_all_project_settings () {
# do whatever it takes to undo the effect of projectSettings.bash,
# e.g. unset variables, remove PATH elements, etc.
}
chpwd () {
case $PWD in
/some/directory|/some/other/directory) . ./projectSettings.bash;;
*) unset_all_project_settings;;
esac
}
Não faça isso em diretórios que você não tenha colocado na lista de permissões, pois isso tornaria muito fácil alguém enganá-lo para executar código arbitrário - enviar um arquivo para você, descompactá-lo, alterá-lo para o diretório criado, e agora você executa o código do invasor.
Eu não recomendo essa abordagem, porque significa que o script será executado mesmo se você entrar nesse diretório por algum motivo que não esteja relacionado ao trabalho no projeto. Eu sugiro ter uma função específica que muda para o diretório do projeto e origina o script de configurações.
myproj () {
cd /some/directory && . ./projectSettings.bash
}