Posso ter aliases do bash locais no diretório?
Dada essa estrutura de diretórios:
dir1/
- .
- ..
- dir2/
- file
Quando eu cd dir1
alias eg
não funciona, mas quando eu cd dir1/dir2/
alias funciona. A definição de alsias também deve ser local, residindo emdir1/dir2/
Caso de uso: Sou programador com diversas ferramentas que acompanham meus projetos. Eu gostaria de criar pseudônimos para alguns deles, mas a maioria deles seriaprojeto/diretórioespecífico.
Eu vi al
o comando bash que faria isso, mas não está presente no meu Ubuntu (14.04).
Responder1
Sim. A abordagem mais simples seria ter um arquivo onde seus aliases fossem 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
onde o eg
alias é definido. Agora, cd
em um deles,fonteo 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ê quiser 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 PROMPT_COMMAND
variável define um comando que é executado antes de cada prompt ser mostrado, ou seja, após qualquer comando executado. Isso significa que assim que você entrar em um diretório que contém um .alias
arquivo, esse arquivo será originado.
Notas
Isso é inseguro. Qualquer código dentro do
.alias
arquivo será executado. Use por sua conta e risco. A abordagem manual é muito mais segura.Quaisquer aliases definidos no
.alias
arquivo ainda estarão disponíveis após 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 recarregar os globais com:unalias -a && . /etc/bash.bashrc && . ~/.bashrc && . ~/.bash_aliases
Para simplificá-lo, transforme-o em uma função adicionando estas linhas ao seu
~/.bashrc
:clear_aliases(){ unalias -a && . /etc/bash.bashrc && . ~/.bashrc && . ~/.bash_aliases; }
Você poderá então executar
clear_aliases
para redefinir seus padrões.