Função Bash al (alias local) não encontrada

Função Bash al (alias local) não encontrada

Posso ter aliases do bash locais no diretório?

Dada essa estrutura de diretórios:

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

Quando eu cd dir1alias egnã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 alo 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 .aliasonde o egalias é definido. Agora, cdem 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_COMMANDvariá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 .aliasarquivo, esse arquivo será originado.

Notas

  • Isso é inseguro. Qualquer código dentro do .aliasarquivo será executado. Use por sua conta e risco. A abordagem manual é muito mais segura.

  • Quaisquer aliases definidos no .aliasarquivo 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_aliasespara redefinir seus padrões.

informação relacionada