Establecer alias bash temporales al ingresar a una carpeta


13

A veces me gusta tener alias bash muy personalizados y quizás combinaciones de teclas cuando entro en una carpeta (puede ser un proyecto en el que estoy acostumbrado a escribir muchos comandos desde la CLI).

Supongamos que cuando ingreso una carpeta como "projectAlpha /" espero algunos alias personalizados como:

  • alias doTaskX='./app arg1 arg2...|filter arg1 arg2...'
  • ...

Más de lo que estaba pensando:

  • Muestra un mensaje útil que muestra alias y comandos comunes
  • Mostrar algunas combinaciones de teclas personalizadas comunes para mi proyecto

Pero tan pronto como salgo de la raíz de mi proyecto, esta configuración deja de estar disponible.

¿Cuál es el mejor enfoque para hacerlo hoy?


Ahora se me ocurrió usar un alias para "cd" en ~ / .bashrc, un alias para ingresar en un directorio y comenzar una nueva bash que lee el .bashrc oculto en ese directorio ...
gzinho

Respuestas:


14

Bash tiene variable especial PROMPT_COMMAND, que se ejecuta cada vez que el contenido después de que se ejecute el comando, por lo que se puede establecer la siguiente manera:

PROMPT_COMMAND='[[ "$PWD" = /tmp ]] && { alias ll=ls; echo "Remember: ll=ls"; } || { unalias ll 2>/dev/null; }'

A partir de ahora, cada vez que esté en el /tmpdirectorio se llcreará un alias y en todos los demás directorios se eliminará.


Probablemente más práctico es reunir todos sus alias y otras cosas en una función (digamos makealias) y todos los alias en la otra función makeunaliasque puede ejecutar según sus necesidades, algo como

PROMPT_COMMAND='[[ "$PWD" = /tmp ]] && makealias || makeunalias 2>/dev/null'

Tenga en cuenta que la redirección de stderr solo está presente para evitar algunas alertas inútiles en este caso.


Ty, lo intentaré. +1 (si pudiera subir)
gzinho

1
@ user3697611 No necesita ninguna reputación para aceptar la respuesta a su propia pregunta. Haga clic en la marca de verificación junto a la respuesta.
Barmar
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.