.bashrc carregando aliases de arquivo diferente

11

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

Atualmente tenho:

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

Mas após o login, recebo:

-bash: alias: -fu: não encontrado -bash: alias: $ USER ": não encontrado

-bash: alias: -lart ": não encontrado

O arquivo .aliases é assim:

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

Vladimir
fonte

Respostas:

13

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

Há duas maneiras de corrigi-lo:

  • Remova todas as aspas 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"é exatamente equivalente.

  • Como alternativa (essa é uma maneira melhor e mais comum), tenha um arquivo com aliascomandos e use o .builtin (aka source) para importá-lo.

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

    então no seu ~/.bashrc:

    . ~/.aliases

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

user1686
fonte
Está certo. Foi uma abordagem completamente errada. Eu mesmo fiz isso usando estes comandos: while read line; faça eco "alias $ line" >> .aliases_full; done <.aliases Acabei de fazer mv .aliases_full .aliases. ./.aliases #in .bashrc Obrigado de qualquer forma :)
Vladimir