Bash no lee .bashrc a menos que se inicie manualmente

22

bashno se .bashrcoriginará desde una terminal interactiva a menos que ejecute manualmente bashdesde una terminal:

$ bash

o fuente de forma manual:

$ source ./.bashrc

o corriendo:

$ st -e bash

Aquí hay algunos resultados útiles, espero:

$ echo $TERM
st-256color

$ echo $SHELL
/bin/sh

$ readlink /bin/sh
bash

$ shopt login_shell
login_shell     off

Estoy en CRUX Linux 3.0 y uso dwmy st. He intentado usar .bash_profiley .profilesin éxito.

¿Algunas ideas?

prisa
fuente

Respuestas:

19

¿Por qué lo originaría? No estás ejecutando cierto bash:

$ echo $SHELL
/bin/sh

En la mayoría de los sistemas modernos shes un enlace simbólico a un shell básico. En mi Debian, por ejemplo:

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

En su caso, shes un enlace a bashpero, como se explica en man bash:

Si se invoca bash con el nombre sh, intenta imitar el comportamiento de inicio de las versiones históricas de sh lo más fielmente posible, a la vez que se ajusta al estándar POSIX. [...] Cuando se invoca como un shell interactivo con el nombre sh, bash busca la variable ENV, expande su valor si está definido y usa el valor expandido como el nombre de un archivo para leer y ejecutar. Dado que un shell invocado como sh no intenta leer y ejecutar comandos desde ningún otro archivo de inicio , la opción --rcfile no tiene ningún efecto.

y

--norc
No lea ni ejecute el archivo de inicialización de todo el sistema /etc/bash.bashrc y el archivo de inicialización personal ~ / .bashrc si el shell es interactivo. Esta opción está activada de forma predeterminada si el shell se invoca como sh.

Entonces, dado que su shell predeterminado es sh, .bashrcno se lee. Simplemente configure su shell predeterminado para bash usando chsh -s /bin/bash.

terdon
fuente
Gracias. Asumí que no importaba desde que lo /bin/shseñalé /bin/bash. Supongo que este problema surgió de no asignar explícitamente el shell a /bin/bashcuando creé originalmente la cuenta de usuario.
prisa
Además, Debian / Ubuntu cambió al dashde /bin/shcomo parte del esfuerzo para reducir el tiempo de arranque. Esto fue divertido cuando mis usuarios comenzaron a preguntar por qué su shell actuaba de manera diferente.
kurtm
18

En .bash_profile asegúrese de tener lo siguiente:

# .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
fuente
1
@terdon Su respuesta es la correcta. Mi respuesta solo sería válida si él estuviera corriendo bash. Buena captura, me perdí eso.
Jeight
Esto podría darle algunos dolores de cabeza si se ejecuta bashjunto a otro shell, como el ksh93que usa .profilede forma predeterminada.
Kusalananda
Si ~ / .bash_profile no existe, puede crearlo.
Pratik Singhal
.bashrc en SO basado en Debain, .bash_profile en CentOS / Fedora / Mac OS
Mitoxys