Les nouvelles sessions tmux ne source pas le fichier bashrc

17

Sommaire

Lorsque je crée une nouvelle session tmux, mon invite tire d'une configuration bash par défaut et je dois exécuter manuellement source ~/.bashrcpour mon invite personnalisée.

Une analyse

J'utilise une machine RHEL 7. J'ai commencé à remarquer ce comportement après une mise à jour bash il y a quelque temps, mais je n'ai pas encore posé la question (et je ne sais pas quelle mise à jour cela a commencé).

Par exemple, j'ai personnalisé mon invite pour qu'elle ressemble à ceci:

[user@hostname ~]$

Chaque fois que je démarre une nouvelle session tmux, il utilise ce qui semble être le bash par défaut:

-sh-4.2$

Une courte série de source ~/.bashrccorrectifs résout toujours le problème, mais c'est ennuyeux de devoir le faire chaque fois que je veux réparer quelque chose de petit. Avez-vous des idées pour que tmux recommence automatiquement?

Si plus d'informations sont nécessaires, je suis heureux de vous fournir.

tmux.conf

Pour référence, j'ai mon tmux.conffichier ci-dessous, bien que ce ne soit pas ce que vous pourriez appeler personnalisé.

setw -g mode-keys vi

# reload tmux.conf
bind r source-file ~/.tmux.conf \; display-message " ✱ ~/.tmux.conf is reloaded"
Justin W. Flory
la source

Réponses:

19

Autant que je sache, tmuxexécute par défaut un shell de connexion. Quand bashest invoqué comme shell interactif de connexion, il recherche ~/.bash_profile, ~/.bash_loginet ~/.profile. Vous devez donc mettre source ~/.bashrcun de ces fichiers.

Une autre façon de résoudre ce problème est de mettre dans votre fichier .tmux.confla ligne:

set-option -g default-shell "/bin/bash"
andreatsh
la source
1
J'ai ajouté la source ~/.bashrcligne à mon .bash_profile, essayé de me déconnecter et de me reconnecter, de créer une nouvelle session tmux, mais aucun changement. Des idées?
Justin W. Flory
1
Essayez de mettre dans votre fichier .tmux.confla ligne set-option -g default-shell "/bin/bash". Cela devrait résoudre votre problème (du moins je l'espère)!
andreatsh
Après avoir rechargé ma configuration tmux, cela a résolu mon problème! Vous souhaitez modifier votre réponse ou en créer une nouvelle? Je serais heureux de le marquer comme accepté. :)
Justin W. Flory
Vous êtes gentil, j'ai rapidement modifié ma réponse!
andreatsh
2
Remarque pour les utilisateurs de macOS: si vous avez installé bashvia Homebrew et que cela ne fonctionne pas, passez "/bin/bash"à "/usr/local/bin/bash".
5

Ceci est lié aux fichiers d'initialisation 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 sautent ~/.bashrc.

default-command shell-commande

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 init pour Bash,

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

Solution

L'étrange exigence de chargement interactif sans connexion déroute également les gens dans d'autres situations. La meilleure solution consiste à modifier l'exigence de chargement en ~/.bashrctant qu'interactif uniquement , ce qui est exactement ce que font 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 Bash de configurer cela dans le profil.

Les références

Simba
la source
2

Ajout de ce qui suit à .tmux.conf:

set-option -g default-shell "/bin/bash"

NE FAIT PAS donne le résultat souhaité.

Uniquement lors de l'ajout source "$HOME/.bashrc" au ~/.bash_profilerésultat souhaité est atteint.

Cela fonctionnera sur une session tmux active lors de l'ouverture d'une nouvelle fenêtre ou d'un nouveau volet, ainsi que lors du détachement et de l'ouverture d'une nouvelle session tmux.

Testé sur:

VERSION="16.04.2 LTS (Xenial Xerus)"
tmux 2.1
Andres Salgado
la source