Qual è il modo migliore per eseguire uno script quando si entra in una directory?
Quando mi sposto in una nuova directory, vorrei che bash esegua lo script projectSettings.bash proprio come fa RVM.
Risposta accettata:
Puoi creare cd
una funzione (e pop
e pushd
), e fai in modo che rilevi se entri in quella particolare directory.
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
}
Non farlo in directory che non hai inserito nella whitelist, perché sarebbe molto facile per qualcuno indurti con l'inganno a eseguire codice arbitrario:inviarti un archivio, quindi decomprimilo, passa alla directory che ha creato e tu' Ora eseguiamo il codice dell'attaccante.
Non consiglio questo approccio, perché significa che lo script verrà eseguito anche se si accede a quella directory per qualche motivo non correlato al lavoro sul progetto. Suggerisco di avere una funzione specifica che cambia nella directory del progetto e genera lo script delle impostazioni.
myproj () {
cd /some/directory && . ./projectSettings.bash
}