Bash ne lit pas .bashrc à moins qu'il ne soit démarré manuellement

22

bashne source à .bashrcpartir d'un terminal interactif que si je lance manuellement bashdepuis un terminal:

$ bash

ou source manuellement:

$ source ./.bashrc

ou en cours d'exécution:

$ st -e bash

Voici quelques résultats utiles que j'espère:

$ echo $TERM
st-256color

$ echo $SHELL
/bin/sh

$ readlink /bin/sh
bash

$ shopt login_shell
login_shell     off

Je suis sur CRUX Linux 3.0 et j'utilise dwmet st. J'ai essayé d'utiliser .bash_profileet .profilesans succès.

Des idées?

hâte
la source

Réponses:

19

Pourquoi l'achèterait-il? Vous ne courez pas vrai bash:

$ echo $SHELL
/bin/sh

Dans la plupart des systèmes modernes, il shexiste un lien symbolique vers un shell de base. Sur mon Debian par exemple:

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

Dans votre cas, shest un lien vers bashmais, comme expliqué dans man bash:

Si bash est appelé avec le nom sh, il essaie d'imiter le comportement de démarrage des versions historiques de sh aussi fidèlement que possible, tout en se conformant également à la norme POSIX. [...] Lorsqu'elle est invoquée en tant que shell interactif avec le nom sh, bash recherche la variable ENV, développe sa valeur si elle est définie et utilise la valeur développée comme nom d'un fichier à lire et à exécuter. Puisqu'un shell appelé comme sh n'essaye pas de lire et d'exécuter des commandes à partir d'autres fichiers de démarrage , l'option --rcfile n'a aucun effet.

et

--norc
Ne pas lire et exécuter le fichier d'initialisation à l'échelle du système /etc/bash.bashrc et le fichier d'initialisation personnel ~ / .bashrc si le shell est interactif. Cette option est activée par défaut si le shell est appelé en tant que sh.

Donc, puisque votre shell par défaut est sh, .bashrcn'est pas lu. Définissez simplement votre shell par défaut sur bash en utilisant chsh -s /bin/bash.

terdon
la source
Merci. J'ai supposé que cela n'avait pas d'importance depuis que je l'ai /bin/shindiqué /bin/bash. Je suppose que ce problème découle de la non affectation explicite du shell /bin/bashlorsque j'ai créé le compte utilisateur à l'origine.
hâte
De plus, Debian / Ubuntu est passé à dashpour /bin/shdans le cadre de l'effort de réduction du temps de démarrage. C'était hilarant lorsque mes utilisateurs ont commencé à demander pourquoi leur shell agissait différemment.
kurtm
18

Dans .bash_profile, assurez-vous que vous disposez des éléments suivants:

# .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
la source
1
@terdon Votre réponse est la bonne. Ma réponse ne serait valable que s'il courait bash. Belle prise, j'ai raté ça.
Jeight
Cela peut vous donner quelques maux de tête si vous exécutez à bashcôté d'un autre shell, comme celui ksh93qui utilise .profilepar défaut.
Kusalananda
Si ~ / .bash_profile n'existe pas, vous pouvez le créer.
Pratik Singhal
.bashrc dans le système d'exploitation Debain, .bash_profile dans CentOS / Fedora / Mac OS
Mitoxys