Función Bash al (alias local) no encontrada

Función Bash al (alias local) no encontrada

¿Puedo tener alias de bash locales en el directorio?

Dada tal estructura de directorio:

dir1/
  - .
  - ..
  - dir2/
  - file

Cuando tengo cd dir1un alias egno 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 alel 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 .aliasel alias. egAhora, cden 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_COMMANDvariable 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 .aliasarchivo, se obtendrá este archivo.

Notas

  • Esto es inseguro. .aliasSe 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 .aliasarchivo 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_aliasespara restablecer sus valores predeterminados.

información relacionada