web-dev-qa-db-fra.com

Comment puis-je configurer mon shell par défaut pour démarrer tmux

Je voudrais que mon shell bash par défaut passe directement dans tmux au lieu de devoir toujours taper tmux à chaque fois.

88
Michael Durrant

Démarrez tmux à chaque connexion Shell , depuis Arch wiki, semble fonctionner. Ajoutez simplement la ligne suivante de code bash à votre .bashrc devant vos alias; le code des autres shells est très similaire:

[[ $TERM != "screen" ]] && exec tmux
49
StarNamer

@ La réponse de StarNamer est généralement exacte, bien que j'inclue généralement les tests suivants pour m'assurer que (1) tmux existe sur le système, (2) nous sommes dans un shell interactif et (3) tmux n'essaie pas de s'exécuter dans lui-même:

if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
  exec tmux
fi

Références

119
user7089

Ajout d'une ligne comme

[ -z "$TMUX"  ] && { tmux attach || exec tmux new-session && exit;}

dans votre fichier bashrc fera probablement le travail. Notez que cette ligne quittera ssh et mettra fin à la connexion une fois que vous aurez détaché ou quitté tmux. J'aime cette configuration car elle enregistre les coups de touche pour mettre fin à la connexion. Mais si vous n'aimez pas cela (ce qui, je pense, est très peu probable) et que vous préférez rester dans le shell de connexion après la résiliation, supprimez simplement la partie exit:

[ -z "$TMUX"  ] && { tmux attach || exec tmux new-session;}

Notez également que vous ne devez pas envelopper tmux attach avec exec, car cela entraînerait la fermeture de la connexion lorsqu'il n'y a aucune session tmux à laquelle se connecter.

22
huangzonghao

Il existe la commande chsh qui modifie le shell de connexion. Consulter man chsh.

6
paul

Accédez aux préférences de terminal. enter image description here

Et puis cliquez sur "barre de commande". enter image description here

Cochez la case "Exécuter une commande personnalisée au lieu de ma vente" et écrivez la commande que vous souhaitez exécuter au démarrage de votre terminal.

5
user174935

J'utilise avec succès

case $- in *i*)
    [ -z "$TMUX" ] && exec tmux
esac

dans mon .zshrc. Si vous utilisez bash, placez-le à la place dans votre .bashrc.


J'ai également essayé de définir tmux comme shell par défaut (chsh -s $(which tmux)) et il semble rompre l'exécution directe des commandes via SSH, par exemple ssh $some_server echo foo Ne produira aucune sortie.

4
n.st

Ajoutant à la réponse de @Louis Maddox, j'exécuterais la partie tmux avec;

(exec tmux attach || exec tmux new-session)
3
devrimbaris

J'ai combiné les vérifications approfondies, avec la vérification de session conditionnelle, et y ai mis ma propre rotation, pour créer une session par défaut qui est connectée à ou créée. Sauf si vous êtes à l'intérieur d'une autre session tmux ou si d'autres conditions de protection sont remplies.

if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
  tmux a -t default || exec tmux new -s default && exit;
fi

Sur la base de ces réponses:

https://unix.stackexchange.com/a/306165/19811

https://unix.stackexchange.com/a/113768/19811

2
yosefrow

Aucune des réponses ci-dessus n'a fonctionné pour moi - exec tmux M'empêche de fermer tmux sans quitter le shell (qu'il soit ouvert avec Ctrl + T ou depuis le menu de l'application).

J'utilise Linux Mint, qui vous permet de mapper certains raccourcis clavier vers des commandes, et (non cachère comme cela peut l'être pour certains ..) J'ai des shells bash avec des commandes démarrant là-bas, par exemple Win + Alt + B fait une sorte d'instruction alambiquée bash -exec(vim) pour éditer mon .bashrc, donc il agit comme un Shell normal.

tmux a chargé plutôt que vim dans cette situation après avoir placé ce qui précède en haut de mon .bashrc. J'ai encapsulé la ligne d'exécution tmux dans une autre instruction if, en vérifiant qu'elle fonctionne en mode interactif.

if command -v tmux>/dev/null; then
        if [ ! -z "$PS1" ]; then # unless Shell not loaded interactively, run tmux
                [[ ! $TERM =~ screen ]] && [ -z $TMUX ] && tmux
        fi
fi

Vous pouvez regrouper tout cela sur une seule ligne, mais pour plus de lisibilité, je pense que ça va.

2
Louis Maddox

Vous pouvez (et devez probablement le faire maintenant) utiliser la commande chsh pour définir tmux comme shell par défaut, puis ajouter ce qui suit à .tmux.conf:

set-option -g default-Shell /path/to/your/favourite/Shell

N'oubliez pas de modifier le chemin à la fin de la ligne.

1
Błażej Michalik

C'est dans mon ~/.profile (J'utilise ksh93):

if [[ -z "$TMUX" ]]; then
    if tmux has-session 2>/dev/null; then
        exec tmux attach
    else
        exec tmux
    fi
fi

Si la variable d'environnement TMUX n'est pas définie/vide, alors nous ne sommes pas déjà dans une session tmux, alors ...

Si tmux has-session retourne avec un état de sortie nul (vrai), il y a une session disponible à attacher. Attachez-y.

Sinon, créez une nouvelle session.

Il est également possible d'utiliser tmux comme shell de connexion. Si vous procédez ainsi, assurez-vous de définir default-Shell vers un shell réel dans votre ~/.tmux.conf fichier (voir le manuel tmux pour plus d'informations à ce sujet).

1
Kusalananda

cela rend tmux ouvert par défaut sur tous les nouveaux Shell d'utilisateurs

cmd='[ $TERM == screen ] || exec tmux'
echo -e "$cmd\n$(cat ~/.bashrc)" > ~/.bashrc
0
dctremblay

Ajoutez ceci dans votre ~/.tmux.conf

set -g default-command /usr/local/bin/fish
0
IanVaughan