Por que o alias de configuração em .profile não está funcionando?

7

Eu tenho isso como a última linha no meu .profile:

alias gl="cd /home/jrenner/glances/glances"

ainda, mesmo após a reinicialização, recebo o comando não encontrado ao digitar gl. O que está acontecendo? Estou logado como o usuário correto.

    
por talloaktrees 26.03.2013 / 03:56

3 respostas

3

Tenho certeza de que a ideia do lpanebr funcionará, mas aqui está uma solução mais elegante. Faça o comando alias em .bashrc É assim que eu faço, ou algumas pessoas preferem adicionar um arquivo dedicado ao alias. Chame de .alias ou qualquer outra coisa e adicione .alias ao seu .bashrc

Gostaria de poder fazer formatações como @lpanelbr. Gostaria de saber se existe um wiki?

    
por Jason 26.03.2013 / 04:43
4

Existem dois motivos relacionados pelos quais os aliases nem sempre funcionam quando colocados no arquivo .profile . A primeira é que o arquivo .profile (ou .bash_profile ) é executado apenas para um shell de login. Se você está começando o bash em uma janela de terminal em X, seu emulador de terminal (por exemplo, gnome-termanl) provavelmente não está executando o bash como um shell de login. [A maioria tem uma opção para mudar isso se você quiser, mas o padrão (para o gnome-termal mesmo assim) é não executá-lo como um shell de login.]
O shell será um shell interativo e, portanto, .bashrc será executado.

No entanto, normalmente o bash foi executado como um shell de login quando a sessão X estava sendo iniciada. Portanto, se houver comandos alias em .profile , eles serão executados juntamente com variáveis de ambiente de configuração, como o PATH, etc. Quando uma janela de terminal é aberta, uma nova instância de bash é executada para solicitar e executar comandos nessa janela de terminal. Ao contrário das variáveis de ambiente, os aliases não podem ser exportados de uma instância do bash para uma nova iniciada por ela. Portanto, os aliases não são passados para o novo shell.

Para ver isso, experimente este experimento:

export ROBERT=bob
alias james=jimmy
echo $ROBERT
alias james
bash               #start a new bash instance
echo $ROBERT
alias james
exit               #end the new bash instance and revert to the original one
echo $ROBERT
alias james

Observe que .bashrc não é executado pelo bash quando é iniciado como um shell de login. Portanto, colocar seus aliases não funcionará sempre, a menos que seu .bashrc seja originado de seu .profile , o que é uma prática muito comum.

    
por Tony McGregor 22.09.2016 / 08:55
0

Se você estiver usando bash ( echo $SHELL ) como interpretador de shell, acho que é melhor (ou talvez a única maneira) se você definir sua própria função de CD.

Edite seu arquivo .bashrc e adicione o seguinte no final:

# my custom functions:
function gl () {
   cd /home/jrenner/glances/glances/
}

Você também pode estendê-lo da seguinte forma:

# my custom functions:
function cdw () {
   cd /home/jrenner/glances/glances/
   ls
}

e mude diretamente para um subdiretório e liste seu conteúdo.

    
por lpanebr 26.03.2013 / 04:35