Já existe um alias para l
in .bashrc
(na verdade, ele é definido em /etc/skel/.bashrc
e copiado para o diretório pessoal do usuário quando o usuário é criado) e é isso que está sobrescrevendo o seu:
$ grep '^alias l=' /etc/skel/.bashrc
alias l='ls -CF'
$ grep '^alias l=' ~/.bashrc
alias l='ls -CF'
No entanto, essa não é a única força em jogo aqui. O que também acontece é que bash
fontes arquivos em ordem específica (e dependendo do modo em que foi iniciado - interativo, não interativo, shell remoto, etc.). A idéia geral é que ele vai de arquivos definidos em /etc/
para arquivos definidos em seu diretório inicial, portanto, seu alias é definido quando bash
sources /etc/.bash_aliases
, mas depois é redefinido quando bash
sources seu ~/.bashrc
.
Aqui está uma demonstração:
$ # define alias in your file and let it source via /etc/bash.bashrc
$ echo "alias sayhi='echo hi'" | sudo tee -a /etc/.bash_aliases
[sudo] password for xieerqi:
alias sayhi='echo hi'
$ echo "[ -f /etc/.bash_aliases ] && source /etc/.bash_aliases" |
> sudo tee -a /etc/bash.bashrc
[sudo] password for xieerqi:
[ -f /etc/.bash_aliases ] && source /etc/.bash_aliases
$ # start new interactive shell
$ bash
$ sayhi
hi
$ # Works, right ? now define same in ~/.bashrc
$ echo "alias sayhi='echo nope'" >> ~/.bashrc
$ # and start shell again, let all files source
$ bash
$ sayhi
nope
Observe que bash --posix
, ou seja, quando o shell está no modo posix, aparentemente, ~/.bashrc
e /etc/bash.bashrc
não são originados; Eu testei várias vezes, mas a invocação do meu alias não produziu nenhum resultado nesse modo.
$ echo "echo 'I am bashrc'" >> ~/.bashrc
$ bash
I am bashrc
$ exit
$ bash --posix
bash-4.3$