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?


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


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

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ć.


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.


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


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


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

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

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.


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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.