Wie kann ich tmux dazu bringen, meine Standardshell zu verwenden?


155

Bei einem neuen Setup verwendet tmux bash anstelle von my default (zsh).

Wie kann ich die Verwendung von zsh erzwingen?


12
herausgefunden. Kann in der tmux-Konfiguration Folgendes einstellen: set -g default-command / bin / zsh set -g default-shell / bin / zsh
re5et

4
FWIW, Sie müssen den Standardbefehl nicht festlegen, wenn Sie die Standardshell festgelegt haben.
Nicholas Riley

Antworten:


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

in ~/.tmux.confoder /etc/tmux.conf. Funktioniert auf Fedora.

Möglicherweise müssen Sie tmux mit neu starten killall tmux; tmux


5
Wenn dies bei Ihnen nicht funktioniert, stellen Sie sicher, dass Sie neu gestartet haben tmux. Scheint offensichtlich, aber ich brauchte eine gute Stunde, um es herauszufinden!
Andy Smith

27
Übrigens: tmux neu starten heißt killall tmux; tmux. Ich habe eine ganze Weile gebraucht, um das herauszufinden.
js-coder

5
Configs konnten neu geladen werden, ohne einen Server zu töten:bind R source-file ~/.tmux.conf \; display-message " Config reloaded..".
ДМИТРИЙ МАЛИКОВ

14
Oder einfach tmux source-file ~/.tmux.confvon der Kommandozeile aus starten .
Petr Pudlák

12
@ js-coder: um deinen tmux-server sauberer zu töten, empfehle ich dir tmux kill-serverstattdessen.
Chuim,

41

Stellen Sie zunächst sicher, dass Ihre Standard-Shell ordnungsgemäß auf zsh eingestellt ist, indem Sie dies in Ihrer Befehlszeile ausführen:

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

Das Folgende in Ihre ~ / .tmux.conf einzufügen, ist eine robustere Option für jede Shell.

set-option -g default-shell $SHELL

1
Es ist nicht notwendig, user shell ( chsh -s) zu setzen, da tmux eine davon unabhängige Option anbietet.
Mahmoud Al-Qudsi

Ich fand es robuster, die Variable $ SHELL zu verwenden. Aber es fügt einen zusätzlichen Schritt und Verwirrung hinzu, also bevorzuge ich die akzeptierte Antwort.
DebugXYZ

Das ist besser als die akzeptierte Antwort. Mein zsh ist nicht in / bin / zsh installiert.
HappyFace

20

Lassen Sie diese Zeile im unteren Bereich Ihrer ~/.tmux.conf

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

Nachdem Sie das hinzugefügt haben, töten Sie Ihren tmux-Server und starten Sie ihn neu, und alles sollte funktionieren.


2
Äh, gibt es Anzeichen dafür, dass re5et (das OP) auf einem Mac ausgeführt wird, oder ist dieses Wrapper-Programm installiert?
Chris Johnsen

1
Ich denke, diese Antwort funktioniert nur für Mac OS X
EhevuTov

5
tmux kill-serverist der Befehl, alle tmux-Server zu beenden
Keith Smiley

1
Obwohl es nicht die Antwort war, nach der das OP gefragt hat, bin ich in diesem Thread gelandet und in der Tat bin ich unter OS X und benutze diesen Wrapper. Dies ist die Lösung, die ich brauchte. also vielen Dank!
Jose Alban

1
Wie unterscheidet sich das von set-option -g default-shell ? Das oben Genannte scheint nicht mit der Fish Shell zu funktionieren.
Tommy

5

Wenn Sie tmux zwingen möchten, dieselbe Shell zu verwenden, die in Ihrer Umgebungsvariablen angegeben ist, können Sie Folgendes verwenden:

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

in deinem ~/.tmux.confoder /etc/tmux.conf.

Um die Änderung zu erhalten , um tatsächlich wirksam wird, müssen Sie möglicherweise auf tmux kill-serverund dann tmuxneu zu starten tmux.


1
Dies ist die einzige Antwort, die bei mir funktioniert hat (der Befehl tmux kill-server)
undefined

2

Verwendung chsh(1):

chsh -s /bin/zsh $USER

1
Ich hatte dieses Set bereits, aber tmux ignorierte es.
6.

2

Abmelden und erneut anmelden hat mein Problem behoben. Wenn $SHELLes wiedergegeben wurde /bin/bash, wurde es nach dem Abmelden in geändert/usr/bin/zsh


2

tmux scheint die SHELLUmgebungsvariable zu verwenden , daher sollte Folgendes funktionieren:

SHELL=/usr/bin/zsh tmux

oder

env SHELL=/usr/bin/zsh tmux

Ich bin nicht sicher, warum dies abgelehnt wurde. Es scheint richtig zu sein: Ein häufiges Problem ist die Verwendung einer anderen Shell für z. B. iTerm, aber das Verlassen der Login-Shell, /bin/bashum sicherzustellen, dass keine nicht-iterativen Unterbrechungen auftreten. iTerm wird nicht $SHELLauf den neuen Shell-Namen gesetzt (unsicher warum), und die Bash-Initialisierung setzt ihn auf die Login-Shell, wenn sie beim Start nicht gesetzt wird. tmux verwendet diesen Wert dann, wenn er default-shellnicht explizit gesetzt ist.
Sam Brightman

Ja, vielleicht env SHELL=/usr/bin/zsh tmuxist es besser? (hat die Antwort aktualisiert).
blueyed

1

Fügen Sie dies in Ihre ~/.tmux.conf

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

1

Die akzeptierte Antwort hat bei mir nicht funktioniert.

Ich musste beides schreiben

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

und

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

in my ~/.tmux.conf- Vergiss nicht tmux kill-server; tmux, die tmux.conf neu zu laden


Ich benutze tmux -V2.6 unter Ubuntu 18 im Gnome-Shell-Emulator.

Ich habe tmux auch mit https://github.com/samoshkin/tmux-config erweitert . Probieren Sie es aus, es ist wirklich cool.


0

Für mich musste ich ersetzen:

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

mit

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

in .tmux.conf und Befehl ausführentmux kill-server; tmux


Dies ist ein Duplikat der Antwort superuser.com/a/1370909/174140 .
18.

@ John, den ich set-option -ganstelle von verwendet habe set -g. verschiedene Versionen von tmux höchstwahrscheinlich
Ali Amin

setist ein Alias ​​für set-option.
19.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.