Sim. A abordagem mais simples seria ter um arquivo em que seus aliases sejam definidos em cada diretório. Então, por exemplo:
$ cat dir1/.alias
alias eg='echo "this is dir1"'
$ cat dir2/.alias
alias eg='echo "this is dir2"'
No exemplo acima, cada diretório contém um arquivo chamado .alias , em que o eg alias está definido. Agora, cd em um deles, fonte do arquivo, e o alias fica disponível:
$ cd dir1 && source .alias
$ eg
This is dir1
$ cd ../dir2 && source .alias
$ eg
This is dir2
Se você deseja que isso seja feito automaticamente, adicione esta linha ao seu ~/.bashrc :
## Check if an '.alias' file exists and, if it does, source it.
PROMPT_COMMAND='[ -e .alias ] && source .alias'
A variável PROMPT_COMMAND define um comando que é executado antes de cada prompt ser mostrado, portanto, após qualquer comando executado. Isso significa que, assim que você entrar em um diretório que contenha um arquivo .alias , esse arquivo será originado.
Notas
-
Isso é inseguro. Qualquer código dentro do arquivo
.aliasserá executado. Use por sua conta e risco. A abordagem manual é muito mais segura. -
Todos os alias definidos no arquivo
.aliasainda estarão disponíveis depois que você sair do diretório, até que sejam substituídos por outra definição de alias com o mesmo nome. Se isso for um problema, você pode limpar todos os aliases e, em seguida, recarregá-los com:unalias -a && . /etc/bash.bashrc && . ~/.bashrc && . ~/.bash_aliasesPara simplificar, crie uma função adicionando essas linhas ao seu
~/.bashrc:clear_aliases(){ unalias -a && . /etc/bash.bashrc && . ~/.bashrc && . ~/.bash_aliases; }Você poderá, então, executar
clear_aliasespara redefinir seus padrões.