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

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

bashnão será originado .bashrcde um terminal interativo, a menos que eu execute manualmente basha partir de um terminal:

$ bash

ou obtenha-o 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. Já tentei usar .bash_profilee .profilesem sucesso.

Alguma ideia?

Responder1

Em .bash_profile certifique-se de ter 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

Responder2

Por que isso seria fonte? Seu shell padrão não é bash, mas sh:

$ echo $SHELL
/bin/sh

Na maioria dos sistemas modernos, shé 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 invocado 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, ao mesmo tempo em que também está 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 estiver definido e usa o valor expandido como o nome de um arquivo para ler e executar. Desdeum shell invocado como sh não tenta ler e executar comandos de nenhum outro arquivo de inicialização, a opção --rcfile não tem efeito.

e

--norc
Não leia e execute o arquivo de inicialização de 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 invocado como sh.

Então, como seu shell padrão é sh, .bashrcnão é lido. Basta definir seu shell padrão para bash usando chsh -s /bin/bash.

informação relacionada