Jak mogę zmusić Tmux do używania mojej domyślnej powłoki?

155

W nowej konfiguracji tmux używa bash zamiast mojego domyślnego (zsh).

Jak mogę zmusić go do używania zsh?

re5et
źródło
12
domyśliłam się. Można ustawić następujące ustawienia w konfiguracji tmux: set -g default-command / bin / zsh set -g default-shell / bin / zsh
re5et
4
FWIW, nie musisz ustawiać domyślnego polecenia, jeśli ustawiłeś domyślną powłokę.
Nicholas Riley

Odpowiedzi:

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

w ~/.tmux.conflub /etc/tmux.conf. Działa na Fedorze.

Może być konieczne zrestartowanie tmux za pomocą killall tmux; tmux

Alex Hammel
źródło
5
Jeśli to nie zadziała, upewnij się, że uruchomiłeś ponownie tmux. Wydaje się to oczywiste, ale zajęło mi to dobrą godzinę!
Andy Smith
27
BTW: Ponowne uruchomienie tmux oznacza killall tmux; tmux. Zajęło mi to trochę czasu, żeby się domyślić.
js-koder
5
Konfiguracje można przeładować bez zabijania serwera:bind R source-file ~/.tmux.conf \; display-message " Config reloaded..".
ДМИТРИЙ МАЛИКОВ
14
Lub po prostu uruchom tmux source-file ~/.tmux.confz wiersza poleceń.
Petr Pudlák
12
@ js-coder: w celu czystszego zabicia twojego serwera tmux poleciłbym tmux kill-serverzamiast tego.
Chuim,
41

Najpierw upewnij się, że domyślna powłoka jest poprawnie ustawiona na zsh, uruchamiając to w wierszu poleceń:

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

Umieszczenie śledzenia w ~ / .tmux.conf jest bardziej niezawodną opcją dla dowolnej powłoki.

set-option -g default-shell $SHELL
DebugujXYZ
źródło
1
Nie jest konieczne ustawianie powłoki użytkownika ( chsh -s), ponieważ tmux oferuje opcję niezależną od tego.
Mahmoud Al-Qudsi
Pomyślałem, że bardziej niezawodne jest użycie zmiennej $ SHELL. Ale to dodaje dodatkowy krok i zamieszanie, więc wolę zaakceptowaną odpowiedź.
DebugXYZ
To jest lepsze niż zaakceptowana odpowiedź. Moje Zsh nie jest zainstalowane w / bin / zsh.
HappyFace
20

Upuść tę linię na dole swojego ~/.tmux.conf

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

Po dodaniu tego zabij i zrestartuj serwer tmux i wszystko powinno działać.

wyattdanger
źródło
2
Eee, czy jest jakaś wskazówka, że ​​re5et (OP) jest na komputerze Mac, czy też ma zainstalowany ten program otoki?
Chris Johnsen
1
Myślę, że ta odpowiedź działa tylko w systemie Mac OS X
EhevuTov
5
tmux kill-serverto polecenie zakończenia wszystkich serwerów tmux
Keith Smiley,
1
Chociaż nie była to odpowiedź, o którą prosiła OP, znalazłem się w tym wątku i rzeczywiście korzystam z OS X, używając tego opakowania, i to jest rozwiązanie, którego potrzebowałem; więc dziękuję!
Jose Alban
1
czym to się różni set-option -g default-shell ? powyższe wydaje się nie działać ze skorupą ryby.
Tommy
5

Jeśli chcesz zmusić tmux do używania tej samej powłoki, jak określono w zmiennej środowiskowej, możesz użyć:

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

w twoim ~/.tmux.conflub /etc/tmux.conf.

Aby uzyskać zmianę rzeczywiście odniosły skutek, może być konieczne tmux kill-server, a następnie tmuxzrestartować tmux.

mareoraft
źródło
1
To jedyna odpowiedź, która zadziałała dla mnie (polecenie tmux kill-server)
niezdefiniowany
2

Użyj chsh(1):

chsh -s /bin/zsh $USER
amfetamachina
źródło
1
miałem już ten zestaw, ale tmux go ignorował.
re5et,
2

Wylogowanie i ponowne zalogowanie rozwiązało mój problem. Gdy echo $SHELLbyło nadal, /bin/bashale po wylogowaniu zostało zmienione na/usr/bin/zsh

Patrick Cho
źródło
2

Wydaje się, że tmux używa SHELLzmiennej środowiskowej, więc powinny działać:

SHELL=/usr/bin/zsh tmux

lub

env SHELL=/usr/bin/zsh tmux
niebieskawy
źródło
Nie jestem pewien, dlaczego zostało to odrzucone. Wygląda na to, że jest poprawny: częstym problemem jest używanie innej powłoki, np. ITerm, ale pozostawianie powłoki logowania, /bin/bashaby zapewnić, że nic nie będzie iteracyjne. iTerm nie ustawi $SHELLnowej nazwy powłoki (nie wiem dlaczego), a inicjalizacja bash ustawi ją na powłokę logowania, jeśli zostanie rozbrojona podczas uruchamiania. tmux następnie używa tej wartości, jeśli default-shellnie jest jawnie ustawiona.
Sam Brightman,
Tak .. może env SHELL=/usr/bin/zsh tmuxlepiej? (zaktualizowałem odpowiedź).
blueyed
1

Dodaj to do swojego ~/.tmux.conf

set -g default-command /usr/local/bin/fish
IanVaughan
źródło
1

Przyjęta odpowiedź nie działała dla mnie.

Musiałem napisać oba

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

i

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

w moim ~/.tmux.conf- nie zapomnij tmux kill-server; tmux, aby ponownie załadować tmux.conf


Używam tmux -V2.6 pod Ubuntu 18 w emulatorze powłoki gnome.

Ulepszyłem również Tmux za pomocą https://github.com/samoshkin/tmux-config . Sprawdź, to naprawdę fajne.

anarchist912
źródło
0

Dla mnie musiałem wymienić:

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

z

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

w .tmux.conf i polecenia uruchomieniatmux kill-server; tmux

Ali Amin
źródło
To jest duplikat odpowiedzi superuser.com/a/1370909/174140 .
174140
@ John użyłem set-option -gzamiast set -g. prawdopodobnie różne wersje tmux
Ali Amin
setjest pseudonimem dla set-option.
174140