O Bash não lê .bashrc, a menos que seja iniciado manualmente

22

bashnão será .bashrcoriginado de um terminal interativo, a menos que eu execute manualmente a bashpartir de um terminal:

$ bash

ou forneça manualmente:

$ source ./.bashrc

ou em execução:

$ st -e bash

Aqui estão alguns resultados úteis, espero:

$ echo $TERM
st-256color

$ echo $SHELL
/bin/sh

$ readlink /bin/sh
bash

$ shopt login_shell
login_shell     off

Estou no CRUX Linux 3.0 e uso dwme st. Eu tentei usar .bash_profilee .profilesem sucesso.

Alguma ideia?

pressa
fonte

Respostas:

19

Por que a fonte seria? Você não está executando true bash:

$ echo $SHELL
/bin/sh

Na maioria dos sistemas modernos, shexiste um link simbólico para um shell básico. No meu Debian, por exemplo:

$ ls -l /bin/sh 
lrwxrwxrwx 1 root root 4 Aug  1  2012 /bin/sh -> dash

No seu caso, shé um link para bashmas, conforme explicado em man bash:

Se o bash for chamado com o nome sh, ele tentará imitar o comportamento de inicialização das versões históricas do sh o mais próximo possível, além de estar em conformidade com o padrão POSIX. [...] Quando invocado como um shell interativo com o nome sh, o bash procura a variável ENV, expande seu valor se for definido e usa o valor expandido como o nome de um arquivo para ler e executar. Como um shell chamado sh não tenta ler e executar comandos de outros arquivos de inicialização , a opção --rcfile não tem efeito.

e

--norc
Não leia e execute o arquivo de inicialização em todo o sistema /etc/bash.bashrc e o arquivo de inicialização pessoal ~ / .bashrc se o shell for interativo. Esta opção está ativada por padrão se o shell for chamado como sh.

Portanto, uma vez que seu shell padrão é sh, .bashrcnão é lido. Basta definir seu shell padrão para bash usando chsh -s /bin/bash.

terdon
fonte
Obrigado. Eu assumi que não importava desde que /bin/shapontado /bin/bash. Suponho que esse problema decorra de não atribuir explicitamente o shell a /bin/bashquando criei a conta do usuário.
haste
Além disso, o Debian / Ubuntu mudou dashpara /bin/shcomo parte do esforço para reduzir o tempo de inicialização. Isso foi hilário quando meus usuários começaram a perguntar por que seu shell agia de maneira diferente.
kurtm
18

Em .bash_profile, verifique se você possui o seguinte:

# .bash_profile

# If .bash_profile exists, bash doesn't read .profile
if [[ -f ~/.profile ]]; then
  . ~/.profile
fi

# If the shell is interactive and .bashrc exists, get the aliases and functions
if [[ $- == *i* && -f ~/.bashrc ]]; then
    . ~/.bashrc
fi
Jeight
fonte
1
@terdon Sua resposta é a correta. Minha resposta só seria válida se ele estivesse correndo bash. Boa captura, eu senti falta disso.
Jeight 10/10
Isso pode causar algumas dores de cabeça se você correr bashcom outro shell, como o ksh93que usa .profilepor padrão.
Kusalananda
Se o ~ / .bash_profile não existir, você poderá criá-lo.
Pratik Singhal
.bashrc no sistema operacional baseado em Debain, .bash_profile no CentOS / Fedora / Mac OS
Mitoxys