Ignorar um alias de Bash dependentes da distribuição para agir um pouco diferente

2

No Ubuntu 16.04, adicionei o seguinte código a /etc/bash.bashrc :

alias ll="ls -la --group-directories-first"

Eu então reiniciei.

Observação: usei /etc/bash.bashrc porque precisava de todos os aliases em um arquivo e disponíveis para todos os usuários.

Minha intenção era reescrever o alias "%"ll "nativo". No entanto, não foi alterado; se eu for para qualquer diretório que inclua dirs e arquivos, e eu executar ll , eu obtenho uma lista sem que dirs sejam ordenados acima dos arquivos. Em outras palavras,

O que eu fiz de errado?

    
por JohnDoea 09.08.2017 / 18:27

3 respostas

3

O ll alias é definido no padrão .bashrc .

Uma definição de alias é um comando. Bash é uma linguagem imperativa, executa comandos um após o outro. Se houver várias definições para o mesmo alias, o alias será redefinido toda vez que o shell executar uma das definições. Assim, a última definição vence.

Quando o bash inicia, ele lê o arquivo do sistema /etc/bash.bashrc antes do arquivo do usuário ~/.bashrc . Assim, uma definição em ~/.bashrc substitui qualquer definição do mesmo alias em /etc/bash.bashrc . Você não pode (sanamente) fazer nada em /etc/bash.bashrc para evitar uma redefinição em ~/.bashrc .

Não faz sentido impor apelidos de conveniência aos usuários. É por isso que ll está definido em ~/.bashrc e não em /etc/bash.bashrc . Então, ao invés de colocar sua definição preferida no arquivo do sistema, coloque-a em seu arquivo de usuário.

Você pode alterar o padrão .bashrc - que é /etc/skel/.bashrc . Esse arquivo é copiado para o diretório pessoal de um usuário quando a conta do usuário é criada. A alteração de um arquivo em /etc/skel não afeta as contas já existentes. Mas mesmo isso não é uma boa ideia, já que o que você está definindo é uma preferência pessoal.

    
por 10.08.2017 / 01:38
2

/etc/bash.bashrc se aplica a todos os usuários

~/.bashrc aplica-se apenas ao usuário em que a pasta base é.

Portanto, se você alterar o alias ll em /etc/bash.bashrc e executar ll , obterá a saída do alias definido em ~/.bashrc , porque ~/.bashrc tem precedência sobre a definição em /etc/bash.bashrc .

Para simplificar; Adicione aliases novos em /etc/bash.bashrc , mas, para reescrever, altere ~/.bashrc .

Editar:

Se você realmente quiser ter tudo em um arquivo, remova todos os aliases de todos os arquivos ~/.bashrc ~/.bash_profile e / ou ~/.profile de todos os usuários e adicione todos os aliases a /etc/bash.bashrc . Isso criará um alias configuração de alias global sem problemas.

Editar 2:

Crie ou edite /etc/skel/.bashrc e copie o .bashrc config padrão, para que, quando você criar um novo usuário, não haja aliases padrão definidos.

Obrigado @ user4556274 pela sugestão de edição.

    
por 09.08.2017 / 18:42
1

Tenho quase certeza que /etc/bash.bashrc não é uma coisa. O arquivo que você está procurando é $HOME/.bash_profile OR $HOME/.profile Como alternativa, você pode usar $HOME/.bashrc , mas acho que profile é o arquivo correto para o que você está tentando realizar.

Para obter uma explicação sobre a diferença entre .bash_profile e .bashrc , consulte: link

Para obter a origem .profile de .bash_profile , adicione o seguinte ao seu .bash_profile :

if [ -f ~/.profile ]; then
  . ~/.profile
fi

Outra opção em potencial seria transformar ll em function dentro de /etc/bash.bashrc em vez de alias , o que acredito que a função terá precedência sobre qualquer alias definido com o mesmo nome.

ll () {

  ls -la --group-directories-first

}
    
por 09.08.2017 / 18:29

Tags