¿Puedo tener alias de bash locales en el directorio?
Dada tal estructura de directorio:
dir1/
- .
- ..
- dir2/
- file
Cuando tengo cd dir1
un alias eg
no funciona, pero cuando tengo cd dir1/dir2/
ese alias sí funciona. La definición de alsia también debe ser local, residiendo endir1/dir2/
Caso de uso: Soy programador con muchas herramientas complementarias diferentes para mis proyectos. Me gustaría crear alias para algunos de ellos, pero la mayoría seríanproyecto/directorioespecífico.
He visto al
el comando bash que lograría esto, pero no está presente en mi Ubuntu (14.04).
Respuesta1
Sí. El enfoque más sencillo sería tener un archivo donde se definan sus alias en cada directorio. Así por ejemplo:
$ cat dir1/.alias
alias eg='echo "this is dir1"'
$ cat dir2/.alias
alias eg='echo "this is dir2"'
En el ejemplo anterior, cada directorio contiene un archivo llamado donde se define .alias
el alias. eg
Ahora, cd
en uno de ellos,fuenteel archivo y el alias estará disponible:
$ cd dir1 && source .alias
$ eg
This is dir1
$ cd ../dir2 && source .alias
$ eg
This is dir2
Si desea que esto se haga automáticamente, agregue esta línea a su ~/.bashrc
:
## Check if an '.alias' file exists and, if it does, source it.
PROMPT_COMMAND='[ -e .alias ] && source .alias'
La PROMPT_COMMAND
variable define un comando que se ejecuta antes de que se muestre cada mensaje, es decir, después de cualquier comando que ejecute. Esto significa que tan pronto como acceda a un directorio que contenga un .alias
archivo, se obtendrá este archivo.
Notas
Esto es inseguro.
.alias
Se ejecutará cualquier código dentro del archivo. Úselo bajo su propio riesgo. El enfoque manual es mucho más seguro.Todos los alias definidos en el
.alias
archivo seguirán estando disponibles después de salir del directorio, hasta que sean sobrescritos por otra definición de alias con el mismo nombre. Si eso es un problema, puede borrar todos los alias y luego volver a cargar los globales con:unalias -a && . /etc/bash.bashrc && . ~/.bashrc && . ~/.bash_aliases
Para simplificarlo, conviértalo en una función agregando estas líneas a su
~/.bashrc
:clear_aliases(){ unalias -a && . /etc/bash.bashrc && . ~/.bashrc && . ~/.bash_aliases; }
Luego podrá ejecutar
clear_aliases
para restablecer sus valores predeterminados.