¿Cuál es la mejor manera de ejecutar un script al ingresar a un directorio?
Cuando me muevo a un nuevo directorio, me gustaría que bash ejecutara el script projectSettings.bash como lo hace RVM.
Respuesta aceptada:
Puedes hacer cd
una función (y pop
y pushd
), y haz que detecte si ingresas a ese directorio en particular.
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
}
No hagas esto en directorios que no hayas incluido en la lista blanca, porque sería muy fácil que alguien te engañe para que ejecutes código arbitrario:te envía un archivo, para que lo descomprimas, cambies al directorio que creó y listo. Ahora ejecutamos el código del atacante.
No recomiendo este enfoque, porque significa que el script se ejecutará incluso si ingresa a ese directorio por alguna razón que no está relacionada con el trabajo en el proyecto. Sugiero tener una función específica que cambie al directorio del proyecto y genere el script de configuración.
myproj () {
cd /some/directory && . ./projectSettings.bash
}