Comment puis-je faire que tmux utilise mon shell par défaut?

155

Sur une nouvelle configuration, tmux utilise bash au lieu de ma valeur par défaut (zsh).

Comment puis-je le forcer à utiliser zsh?

re5et
la source
12
deviner. Peut définir la configuration suivante dans tmux: set -g default-commande / bin / zsh défini par défaut -g-shell / bin / zsh
re5et
4
FWIW, vous n'avez pas besoin de définir default-command si vous avez défini default-shell.
Nicholas Riley

Réponses:

203
set-option -g default-shell /bin/zsh

dans ~/.tmux.confou /etc/tmux.conf. Fonctionne sur Fedora.

Vous devrez peut-être redémarrer tmux avec killall tmux; tmux

Alex Hammel
la source
5
Si cela ne fonctionne pas pour vous, assurez-vous de redémarrer tmux. Cela semble évident, mais il m'a fallu une bonne heure pour comprendre!
Andy Smith
27
BTW: Redémarrer tmux signifie killall tmux; tmux. Il m'a fallu un bon bout de temps pour comprendre.
js-codeur
5
Les configurations peuvent être rechargées sans tuer un serveur:bind R source-file ~/.tmux.conf \; display-message " Config reloaded..".
Posté par: МАЛИКОВ le
14
Ou simplement, exécutez tmux source-file ~/.tmux.confdepuis la ligne de commande.
Petr Pudlak
12
@ js-coder: pour mieux tuer votre serveur tmux, je le recommanderais à la tmux kill-serverplace.
Chuim
41

Tout d’abord, assurez-vous que votre shell par défaut est correctement défini sur zsh en l’exécutant dans votre ligne de commande:

chsh -s $(`which zsh`) $USER

Placer le texte suivant dans votre ~ / .tmux.conf est une option plus robuste pour n’importe quel shell.

set-option -g default-shell $SHELL
DebugXYZ
la source
1
Il n'est pas nécessaire de définir l'utilisateur shell ( chsh -s) car tmux offre une option indépendante de celle-ci.
Mahmoud Al-Qudsi,
Je pensais qu'il était plus robuste d'utiliser la variable $ SHELL. Mais cela ajoute un pas supplémentaire et de la confusion donc je préfère la réponse acceptée.
DebugXYZ le
C'est mieux que la réponse acceptée. Mon zsh n'est pas installé dans / bin / zsh.
HappyFace
20

Déposez cette ligne au bas de votre ~/.tmux.conf

set-option -g default-command "reattach-to-user-namespace -l zsh"

Après avoir ajouté cela, tuez et redémarrez votre serveur tmux et tout devrait fonctionner.

wyattdanger
la source
2
Euh, y a-t-il une indication que re5et (l'OP) est sur un Mac, ou ce programme d'emballage est-il installé?
Chris Johnsen
1
Je pense que cette réponse ne fonctionne que pour Mac OS X
EhevuTov
5
tmux kill-serverest la commande pour mettre fin à tous les serveurs tmux
Keith Smiley
1
Bien que ce ne soit pas la réponse demandée par l'OP, je me suis retrouvé dans ce fil de discussion et, en fait, je suis sous OS X, j'utilise cet emballage, et c'est la solution dont j'avais besoin. alors merci!
Jose Alban
1
en quoi cela diffère- set-option -g default-shell t-il? ce qui précède ne semble pas fonctionner avec la coquille de poisson.
Tommy
5

Si vous voulez forcer tmux à utiliser le même shell que celui spécifié dans votre variable d'environnement, vous pouvez utiliser:

# force SHELL ENV variable as shell
set-option -g default-shell ${SHELL}

dans votre ~/.tmux.confou /etc/tmux.conf.

Pour obtenir le changement de réellement prendre effet, vous devrez peut - être tmux kill-serverpuis tmuxredémarrer tmux.

mareoraft
la source
1
C’est la seule réponse qui ait fonctionné pour moi (commande tmux kill-server)
indéfini le
3

tmux semble utiliser la SHELLvariable d'environnement, les éléments suivants devraient donc fonctionner:

SHELL=/usr/bin/zsh tmux

ou

env SHELL=/usr/bin/zsh tmux
blueyed
la source
Vous ne savez pas pourquoi cela a été voté à la baisse. Cela semble être correct: un problème courant consiste à utiliser un shell différent pour, par exemple, iTerm, tout en laissant un shell de connexion /bin/bashafin d’éviter toute interruption non itéractive. iTerm ne définira $SHELLpas le nouveau nom du shell (vous ne savez pas pourquoi), et son initialisation sur bash le définira sur le shell de connexion s'il n'est pas défini au démarrage. tmux utilise ensuite cette valeur si default-shelln'est pas défini explicitement.
Sam Brightman
Ouais .. peut env SHELL=/usr/bin/zsh tmux- être que c'est mieux? (mis à jour la réponse).
blueyed
2

Utiliser chsh(1):

chsh -s /bin/zsh $USER
amphétamachine
la source
1
J'avais déjà cet ensemble, mais tmux l'ignorait.
Re5et
2

La déconnexion et la connexion à nouveau ont résolu mon problème. Lorsque $SHELLcela a été répété, il était toujours, /bin/bashmais après la déconnexion, il a été remplacé par/usr/bin/zsh

Patrick Cho
la source
1

Ajoutez ceci dans votre ~/.tmux.conf

set -g default-command /usr/local/bin/fish
IanVaughan
la source
1

La réponse acceptée n'a pas fonctionné pour moi.

Je devais écrire les deux

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

et

set -g default-commanmd "/bin/bash"

dans mon ~/.tmux.conf- N'oubliez pas tmux kill-server; tmuxde recharger le fichier tmux.conf


J'utilise tmux -V2.6 sous Ubuntu 18 dans l'émulateur gnome-shell.

J'ai également amélioré tmux avec https://github.com/samoshkin/tmux-config . Check it out, c'est vraiment cool.

anarchiste912
la source
0

Pour moi je devais remplacer:

default-command "/usr/local/bin/fish"
default-shell "/usr/local/bin/fish"

avec

set-option -g default-command "/usr/local/bin/fish"
set-option -g default-shell "/usr/local/bin/fish"

dans .tmux.conf et exécuter la commandetmux kill-server; tmux

Ali Amin
la source
Ceci est une copie de la réponse superuser.com/a/1370909/174140 .
174140
@ John j'ai utilisé set-option -gau lieu de set -g. versions les plus probables de tmux
Ali Amin
setest un alias pour set-option.
174140 le