Quelle est la meilleure façon d'exécuter un script en entrant dans un répertoire ?
Lorsque je me déplace dans un nouveau répertoire, j'aimerais que bash exécute le script projectSettings.bash comme le fait RVM.
Réponse acceptée :
Vous pouvez faire cd
une fonction (et pop
et pushd
), et faites-le détecter si vous entrez dans ce répertoire particulier.
cd () { builtin cd "[email protected]" && chpwd; }
pushd () { builtin pushd "[email protected]" && chpwd; }
popd () { builtin popd "[email protected]" && 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
}
Ne faites pas cela dans des répertoires que vous n'avez pas mis sur liste blanche, car cela permettrait à quelqu'un de vous inciter à exécuter du code arbitraire très facilement - vous envoyez une archive, vous la décompressez, vous changez dans le répertoire qu'elle a créé, et vous ' J'ai maintenant exécuté le code de l'attaquant.
Je ne recommande pas cette approche, car cela signifie que le script sera exécuté même si vous entrez dans ce répertoire pour une raison sans rapport avec le travail sur le projet. Je suggère d'avoir une fonction spécifique qui modifie le répertoire du projet et source le script de paramètres.
myproj () {
cd /some/directory && . ./projectSettings.bash
}