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

11

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

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

No entanto, 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.

Talloaktrees
fonte
Onde você está digitando gl? O terminal? A GUI?
Thomas Ward
11
Ninguém nunca abordou o original por quê? questão. Posso confirmar que os aliases definidos em .profilenão funcionam em nenhum contexto que tentei: logons de console de texto, terminais gráficos ou qualquer outra coisa, mesmo que as variáveis ​​ambientais do mesmo arquivo funcionem.
Daniel Mahler
@DanielMahler, você tem uma razão para isso?
Maged Saeed

Respostas:

4

Tenho certeza de que a ideia de lpanebr funcionará, mas aqui está uma solução mais elegante. Faça o comando aliás em .bashrc É assim que eu faço, ou algumas pessoas preferem adicionar um arquivo dedicado ao alias. Ligue .aliasou faça o que quiser e adicione .aliasao seu.bashrc

Gostaria de poder formatar como @lpanelbr. Gostaria de saber se existe um wiki?

Jason
fonte
11
Quanto à formatação, o askubuntu usa remarcação. Por favor, consulte askubuntu.com/editing-help para obter detalhes.
Saji89 26/03
11
Por que .bashrcfunciona enquanto .profilenão? Além disso, qualquer motivo pelo qual você escolheu nomear o arquivo de alias em .alliasvez de .alias?
Tom
# 1 Pelo que entendi .bashrc é específico para o bash e .profile é específico para a linha de comando que não é do bash. # 2 Não sei o que você quer dizer. Eu posso soletrar depois de tudo. (editado)
Jason
7

Há dois motivos relacionados pelos quais os aliases nem sempre funcionam quando inseridos no .profilearquivo. A primeira é que o arquivo .profile(ou .bash_profile) é executado apenas para um shell de logon. Se você está iniciando o bash em uma janela de terminal no 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 alterar isso, se você quiser, mas o padrão (para o gnome-termal de qualquer maneira) 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 alternativos, .profileeles serão executados juntamente com a definição de variáveis ​​de ambiente como PATH etc. Quando uma janela do terminal é aberta, uma nova instância do bash é executada para solicitar e executar comandos nessa janela do terminal. Diferentemente 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 transmitidos para o novo shell.

Para ver isso, tente 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 .bashrcnão é executado pelo bash quando é iniciado como um shell de logon. Portanto, colocar seus apelidos ali nem sempre funcionará, a menos que você .bashrcseja originário do seu .profile, o que é uma prática muito comum.

Tony McGregor
fonte
Verificado: adicionando source .bashrcem .bash_profilepermitido o conjunto alias no bashrc ao trabalho.
Treefish Zhang
Parece que esta deve ser a resposta correta. Além disso, no Ubuntu, basta adicionar seus apelidos no ~/.bash_aliases. Essa é a maneira certa de fazer isso. (leia o arquivo .bashrc para obter detalhes).
Emilio M.
0

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

Edite seu .bashrcarquivo e adicione o seguinte no final:

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

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

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

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

lpanebr
fonte
11
Essa pode ser uma boa sugestão, mas não é uma resposta, pois não explica por que a aliasdiretiva colocada no .profilearquivo falha.
Tom
0
$ bash #start a new bash instance

Este foi um problema com o meu servidor. Simples source .profilenão funcionou por algum motivo

Mladen Janjetovic
fonte
0

A maneira correta de fazer isso no Ubuntu é adicionar o seu alias ao ~/.bash_aliases. Crie o arquivo se ele não existir.

Esse arquivo (se presente) é chamado a partir do padrão ~/.bashrce o alias também estará disponível nos emuladores de terminal.

Emilio M.
fonte