Come posso fare in modo che tmux usi la mia shell predefinita?


155

In una nuova configurazione, tmux sta usando bash invece del mio default (zsh).

Come posso forzarlo ad usare zsh?


12
capito. È possibile impostare quanto segue in tmux config: set -g default-command / bin / zsh set -g default-shell / bin / zsh
re5et

4
FWIW, non è necessario impostare default-command se hai impostato default-shell.
Nicholas Riley,

Risposte:


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

in ~/.tmux.confo /etc/tmux.conf. Funziona su Fedora.

Potrebbe essere necessario riavviare tmux con killall tmux; tmux


5
Se questo non funziona per te, assicurati di riavviare tmux. Sembra ovvio ma mi ci è voluta un'ora buona per capire!
Andy Smith,

27
A proposito: riavviare tmux significa killall tmux; tmux. Mi ci è voluto un po 'per capire.
js-coder,

5
Le configurazioni potrebbero essere ricaricate senza uccidere un server:bind R source-file ~/.tmux.conf \; display-message " Config reloaded..".
ДМИТРИЙ МАЛИКОВ

14
O semplicemente esegui tmux source-file ~/.tmux.confdalla riga di comando.
Petr Pudlák,

12
@ js-coder: per uccidere in modo più pulito il tuo server tmux raccomanderei tmux kill-serverinvece.
Chuim,

41

Per prima cosa assicurati che la tua shell predefinita sia impostata correttamente su zsh eseguendo questo nella tua riga di comando:

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

Inserire il seguente in ~ / .tmux.conf è un'opzione più solida per qualsiasi shell.

set-option -g default-shell $SHELL

1
Non è necessario impostare la shell utente ( chsh -s) poiché tmux offre un'opzione indipendente da quella.
Mahmoud Al-Qudsi,

Ho pensato che fosse più robusto usare la variabile $ SHELL. Ma aggiunge un ulteriore passo e confusione, quindi preferisco la risposta accettata.
DebugXYZ

Questo è meglio della risposta accettata. Il mio zsh non è installato in / bin / zsh.
HappyFace

20

Rilascia questa riga nella parte inferiore della tua ~/.tmux.conf

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

Dopo averlo aggiunto, uccidi e riavvia il server tmux e tutto dovrebbe funzionare.


2
Ehm, c'è qualche indicazione che re5et (OP) sia su un Mac o che sia installato quel programma wrapper?
Chris Johnsen,

1
Penso che questa risposta
funzioni

5
tmux kill-serverè il comando per terminare tutti i server tmux
Keith Smiley,

1
Sebbene non fosse la risposta richiesta dall'OP, sono finito in questo thread e in effetti sono su OS X, usando questo wrapper, e questa è la soluzione di cui avevo bisogno; quindi grazie!
Jose Alban,

1
in cosa differisce da set-option -g default-shell ? quanto sopra non sembra funzionare con la conchiglia di pesce.
Tommy

5

Se si desidera forzare tmux a utilizzare la stessa shell specificata nella variabile di ambiente, è possibile utilizzare:

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

nel tuo ~/.tmux.confo /etc/tmux.conf.

Per rendere effettiva la modifica, potrebbe essere necessario tmux kill-servere quindi tmuxriavviare tmux.


1
Questa è l'unica risposta che ha funzionato per me (il comando tmux kill-server)
non definito il

3

tmux sembra usare la SHELLvariabile d'ambiente, quindi dovrebbe funzionare quanto segue:

SHELL=/usr/bin/zsh tmux

o

env SHELL=/usr/bin/zsh tmux

Non sono sicuro del motivo per cui questo è stato votato in negativo. Sembra corretto: un problema comune è l'utilizzo di una shell diversa, ad esempio iTerm, ma lasciando la shell di accesso /bin/bashper garantire che non si verifichino interruzioni non iterattive. iTerm non imposterà $SHELLil nuovo nome della shell (incerto perché) e l'inizializzazione bash lo imposterà sulla shell di login se non impostato all'avvio. tmux utilizza quindi questo valore se default-shellnon è impostato in modo esplicito.
Sam Brightman,

Sì .. forse env SHELL=/usr/bin/zsh tmuxè meglio? (aggiornata la risposta).
bluato il


2

Disconnettersi e riconnettersi hanno risolto il mio problema. Quando echeggiato $SHELLera ancora, /bin/bashma dopo il log-out è stato modificato in/usr/bin/zsh


1

Aggiungi questo al tuo ~/.tmux.conf

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

1

La risposta accettata non ha funzionato per me.

Ho dovuto scrivere entrambi

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

e

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

nel mio ~/.tmux.conf- Non dimenticare di tmux kill-server; tmux, per ricaricare tmux.conf


Sto usando tmux -V2.6 sotto Ubuntu 18 nell'emulatore gnome-shell.

Ho anche migliorato tmux con https://github.com/samoshkin/tmux-config . Dai un'occhiata, è davvero bello.


0

Per me ho dovuto sostituire:

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

con

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

nel .tmux.conf comando ed eseguitmux kill-server; tmux


Questo è un duplicato della risposta superuser.com/a/1370909/174140 .
174140,

@john ho usato set-option -ginvece di set -g. versioni diverse di tmux molto probabilmente
Ali Amin,

setè un alias per set-option.
174140
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.