GNU/Linux >> Tutoriales Linux >  >> Linux

¿Ejecutar scripts de Bash al ingresar a un directorio?

¿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
}

Linux
  1. Manejo de errores en scripts Bash

  2. ¿Usar la extensión .sh o .bash para scripts Bash?

  3. Ejecutar script bash desde URL

  4. Bash:¿No existe tal archivo o directorio?

  5. Ejecute todos los scripts de shell en la carpeta

Cómo verificar si existe un archivo o directorio en Bash

Cómo verificar si existe un archivo o directorio en Bash

Escribir comentarios en Bash Scripts

Cómo ejecutar todos los scripts en un directorio en Linux

Cómo crear documentos con scripts Bash

Bash ya no cambia de directorio