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?


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


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

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.


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.


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

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

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


1

Ajoutez ceci dans votre ~/.tmux.conf

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

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.


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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.