.bashrc / .profile n'est pas chargé sur la nouvelle session (ou fenêtre) tmux - pourquoi?

94

Lorsque tmux démarre ou ouvre une nouvelle fenêtre, il ne charge pas mon fichier .profileou .bashrc. Je finis par taper à . ~/.bashrcchaque fois. Existe-t-il un moyen de faire en sorte que cela se produise automatiquement?

John Smith
la source

Réponses:

146

Oui, à la fin de votre .bash_profile, mettez la ligne:

. ~/.bashrc

Cela source automatiquement le fichier rc dans les circonstances où il ne traiterait normalement que le profil.

Les règles quant au moment bash exécution de certains fichiers sont compliquées et dépendent du type de shell démarré (connexion / non-connexion, interactif ou non, etc.), ainsi que des arguments de ligne de commande et des variables d'environnement.

Vous pouvez les voir dans la man bashsortie, recherchez simplement INVOCATION- vous aurez probablement besoin de temps pour le digérer et le décoder :-)

paxdiablo
la source
2
Le problème avec cette solution est que sur certains systèmes, .bashrc appelle .bash_profile.
Honza
1
Permettez-moi de me corriger: les systèmes n'ont pas .bashrc appelant .bash_profile, mais vous devez vous assurer que vous ne le faites pas vous-même.
Honza
1
@Honza, ce serait une configuration très inhabituelle car c'est presque toujours l'inverse. Quelqu'un pourrait certainement s'arranger pour le faire de cette façon, mais nous devrions remettre en question leur santé mentale :-)
paxdiablo
2
En effet, il s'est avéré que je me suis arrangé pour le faire de cette façon (et que je l'ai oublié). Vous êtes invités à remettre en question ma santé mentale ...;)
Honza
3
Je pensais que c'était la question ....bashrc/.profile is not loaded on new tmux session (or window) — why?
dylnmc
16

Lancer bash a fonctionné explicitement pour moi, en ajoutant cette ligne à mon fichier ~ / .tmux.conf:

set-option -g default-command "exec /bin/bash"
Keith
la source
1
Cela a fonctionné pour moi! Cependant, vous n'avez pas besoin de la partie "exec". J'ai ajouté à mon la ligne suivante ~/.tmux.conf : set -g default-command "/bin/bash". Merci mon pote.
joker
Mais, avez-vous une idée de pourquoi cela se produit? J'ai soudainement remarqué cela après la mise à niveau d'Ubuntu 16.04 vers 18.04.2. C'est la seule différence à laquelle je peux penser. De plus, j'ai remarqué que certaines configurations ne fonctionnaient pas et que je devais me conformer à une nouvelle syntaxe (il semble que tmux ait également été mis à jour, mais je ne me souviens pas de la version de tmux que j'avais précédemment utilisée pour vérifier).
joker
6

Les anciennes réponses ont fourni des solutions mais n'ont pas expliqué la raison. C'est ici.

Ceci est lié aux fichiers init Bash. Par défaut, ~/.bashrcest utilisé dans un shell interactif sans connexion . Il ne proviendra pas d'un shell de connexion. Tmux utilise un shell de connexion par défaut. Par conséquent, les shells démarrés par tmux skip ~/.bashrc.

default-command commande shell

La valeur par défaut est une chaîne vide, qui demande à tmux de créer un shell de connexion en utilisant la valeur de l' default-shelloption.

Fichiers d'initialisation pour Bash,

  1. mode de connexion:
    1. /etc/profile
    2. ~/.bash_profile, ~/.bash_login, ~/.profile(Seulement le premier qui existe)
  2. non-login interactif :
    1. /etc/bash.bashrc (certains Linux; pas sur Mac OS X)
    2. ~/.bashrc
  3. non interactif:
    1. fichier source dans $BASH_ENV

L'étrange exigence de chargement interactif et sans connexion déroute également les gens dans d'autres situations. La meilleure solution est de modifier l'exigence de chargement en ~/.bashrctant qu'interactif uniquement , ce que font exactement certaines distributions, comme Ubuntu.

# write content below into ~/.profile, or ~/.bash_profile

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

Cela devrait être la solution que vous désirez. Et je recommande à chaque utilisateur de Bash de configurer cela dans le profil.

Références

Simba
la source
1

La solution qui a fonctionné pour moi est la suivante:

  • Créez un .bash_profilefichier si vous n'en avez pas~
  • À la fin du .bash_profileput source ~/.bashrcousource ~/.profile
  • Redémarrez tmux.

Le problème devrait maintenant être résolu.

Jaco Malan
la source
0

J'ai eu le même problème et les solutions jusqu'à présent n'ont pas fonctionné pour moi. La solution qui a fonctionné pour moi peut être trouvée ici .

En bref, les tmuxfenêtres / sessions utilisent un shell de connexion qui recherche un ~/.profilefichier parmi d'autres au démarrage.

Ce que je voulais, c'était que zsh commence à chaque nouvelle tmux fenêtre donc je mets exec zshau bas de mon ~/.profile.

Kellie Lutze
la source