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

21

bash não fornecerá .bashrc a partir de um terminal interativo, a menos que eu execute manualmente bash de um terminal:

$ bash

ou manualmente fonte:

$ source ./.bashrc

ou em execução:

$ st -e bash

Eis alguns resultados úteis que 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 dwm e st . Eu tentei usar .bash_profile e .profile sem sucesso.

Alguma idéia?

    
por haste 10.10.2013 / 20:33

2 respostas

19

Por que isso seria possível? Você não está executando o verdadeiro bash :

$ 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 bash , mas, como explicado em man bash :

If bash is invoked with the name sh, it tries to mimic the startup behavior of historical versions of sh as closely as possible, while conforming to the POSIX standard as well. [...] When invoked as an interactive shell with the name sh, bash looks for the variable ENV, expands its value if it is defined, and uses the expanded value as the name of a file to read and execute. Since a shell invoked as sh does not attempt to read and execute commands from any other startup files, the --rcfile option has no effect.

e

--norc
Do not read and execute the system wide initialization file /etc/bash.bashrc and the personal initialization file ~/.bashrc if the shell is interactive. This option is on by default if the shell is invoked as sh.

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

    
por 10.10.2013 / 20:41
16

No .bash_profile, verifique se você tem 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
    
por 10.10.2013 / 20:41