.bashrc carregando aliases de arquivos diferentes

9

Eu tenho um arquivo .bashrc, que eu quero configurar para que ele leia aliases de um arquivo .aliases e configure-os.

Atualmente, tenho:

# User specific aliases and functions
while read alias_line
do
        echo 'alias ${alias_line}'
done < .aliases

Mas após o login, obtenho:

-bash: alias: -fu: not found -bash: alias: $USER": not found

-bash: alias: -lart": not found

O arquivo .aliases é assim:

psu="ps -fu $USER" ll="ls -lart"
pico='nano'

    
por Vladimir 04.09.2011 / 15:02

1 resposta

12

Quando você usa alias ${alias_line} , a variável é dividida em espaços, ignorando as regras de cotação.

Existem duas maneiras de corrigi-lo:

  • Remova todas as citações do arquivo de alias:

    ll=ls -lart
    psu=ps -fu $USER
    

    e coloque a variável entre aspas:

    alias "$alias_line"
    

    Isso funciona porque, no bash, ll="ls -lart" e "ll=ls -lart" são exatamente equivalentes.

  • Como alternativa (essa é uma maneira melhor e mais comum), tenha um arquivo com comandos alias e use o . builtin (também conhecido como source ) para importá-lo.

    alias pico='nano'
    alias psu='ps x'
    alias ll='ls -lart'
    

    e, em seguida, no seu ~/.bashrc :

    . ~/.aliases
    

O segundo método é melhor , pois não limita você a aliases, mas também permite definir funções , que são muito mais poderosas.

    
por 04.09.2011 / 15:21