Bash al (alias local) função não encontrada [fechada]

1

Posso ter alias de bash locais para o diretório?

Dada essa estrutura de diretório:

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

Quando eu cd dir1 alias eg não funciona, mas quando eu cd dir1/dir2/ esse alias funciona. Definição de alsias também deve ser local, residindo em dir1/dir2/

Caso de uso: Sou programador com muitas ferramentas diferentes para meus projetos. Eu gostaria de fazer aliases para alguns deles, mas a maioria seria project / directory específica.

Eu vi o comando al bash que iria realizar isso, mas não está presente no meu Ubuntu (14.04).

    
por przemo_li 02.11.2015 / 14:38

1 resposta

1

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 .alias será executado. Use por sua conta e risco. A abordagem manual é muito mais segura.

  • Todos os alias definidos no arquivo .alias ainda 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_aliases
    

    Para 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_aliases para redefinir seus padrões.

por terdon 02.11.2015 / 16:03