¿Cómo puedo hacer que tmux use mi shell predeterminado?

155

En una nueva configuración, tmux está usando bash en lugar de mi predeterminado (zsh).

¿Cómo puedo forzarlo a usar zsh?

re5et
fuente
12
Lo averigué. Puede configurar lo siguiente en tmux config: set -g default-command / bin / zsh set -g default-shell / bin / zsh
re5et
44
FWIW, no necesita establecer el comando predeterminado si ha configurado el shell predeterminado.
Nicholas Riley

Respuestas:

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

en ~/.tmux.confo /etc/tmux.conf. Funciona en Fedora.

Puede que tenga que reiniciar tmux con killall tmux; tmux

Alex Hammel
fuente
55
Si esto no funciona para usted, asegúrese de reiniciar tmux. Parece obvio, ¡pero me tomó una buena hora descubrirlo!
Andy Smith
27
Por cierto: reiniciar tmux significa killall tmux; tmux. Me llevó bastante tiempo darme cuenta.
js-coder
55
Las configuraciones se pueden volver a cargar sin matar un servidor:bind R source-file ~/.tmux.conf \; display-message " Config reloaded..".
ДМИТРИЙ МАЛИКОВ
14
O simplemente ejecute tmux source-file ~/.tmux.confdesde la línea de comando.
Petr Pudlák
12
@ js-coder: para matar más limpiamente su servidor tmux, recomendaría en su tmux kill-serverlugar.
Chuim
41

Primero asegúrese de que su shell predeterminado esté configurado correctamente en zsh ejecutando esto en su línea de comando:

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

Colocar los siguientes en su ~ / .tmux.conf es una opción más robusta para cualquier shell.

set-option -g default-shell $SHELL
DebugXYZ
fuente
1
No es necesario configurar el shell del usuario ( chsh -s) ya que tmux ofrece una opción independiente de eso.
Mahmoud Al-Qudsi
Pensé que era más robusto usar la variable $ SHELL. Pero agrega un paso adicional y confusión, así que prefiero la respuesta aceptada.
DebugXYZ
Esto es mejor que la respuesta aceptada. Mi zsh no está instalado en / bin / zsh.
HappyFace
20

Suelta esta línea en la parte inferior de tu ~/.tmux.conf

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

Después de agregar eso, elimine y reinicie su servidor tmux y todo debería funcionar.

Wyattdanger
fuente
2
Er, ¿hay alguna indicación de que re5et (el OP) está en una Mac, o tiene ese programa envoltorio instalado?
Chris Johnsen
1
Creo que esta respuesta solo funciona para Mac OS X
EhevuTov
55
tmux kill-serveres el comando para finalizar todos los servidores tmux
Keith Smiley
1
Aunque no fue la respuesta que solicitó el OP, terminé en este hilo y de hecho estoy en OS X, usando este contenedor, y esta es la solución que necesitaba; ¡Así que gracias!
Jose Alban
1
¿Cómo difiere esto de set-option -g default-shell ? lo anterior no parece funcionar con la concha de pescado.
Tommy
5

Si desea forzar a tmux a usar el mismo shell especificado en su variable de entorno, puede usar:

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

en tu ~/.tmux.confo /etc/tmux.conf.

Para que el cambio surta efecto, es posible que deba reiniciar tmux tmux kill-servery luego tmuxreiniciarlo.

mareoraft
fuente
1
Esta es la única respuesta que funcionó para mí (el comando tmux kill-server)
indefinido el
3

Parece que tmux usa la SHELLvariable de entorno, por lo que lo siguiente debería funcionar:

SHELL=/usr/bin/zsh tmux

o

env SHELL=/usr/bin/zsh tmux
azulado
fuente
No estoy seguro de por qué esto fue rechazado. Parece ser correcto: un problema común es usar un shell diferente para, por ejemplo, iTerm, pero dejar el shell de inicio de sesión /bin/bashpara garantizar que no haya interrupciones no iterativas. iTerm no se establecerá $SHELLcon el nuevo nombre de shell (no estoy seguro de por qué), y la inicialización de bash lo establecerá en el shell de inicio de sesión si no está configurado al inicio. tmux luego usa este valor si default-shellno se establece explícitamente.
Sam Brightman, el
Sí ... tal vez env SHELL=/usr/bin/zsh tmuxes mejor? (actualizado la respuesta).
azulada el
2

Uso chsh(1):

chsh -s /bin/zsh $USER
anfetamaquina
fuente
1
Ya tenía este conjunto, pero tmux lo estaba ignorando.
re5et
2

Cerrar sesión y volver a iniciar sesión solucionó mi problema. Cuando se hizo eco $SHELL, todavía estaba, /bin/bashpero después de cerrar sesión se cambió a/usr/bin/zsh

Patrick Cho
fuente
1

Agregue esto a su ~/.tmux.conf

set -g default-command /usr/local/bin/fish
IanVaughan
fuente
1

La respuesta aceptada no funcionó para mí.

Tuve que escribir ambos

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

y

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

en mi ~/.tmux.conf- No te olvides tmux kill-server; tmuxde recargar tmux.conf


Estoy usando tmux -V2.6 bajo Ubuntu 18 en el emulador gnome-shell.

También mejoré tmux con https://github.com/samoshkin/tmux-config . Compruébalo, es realmente genial.

anarquista912
fuente
0

Para mí tuve que reemplazar:

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"

entrar .tmux.conf y ejecutar el comandotmux kill-server; tmux

Ali Amin
fuente
Este es un duplicado de la respuesta superuser.com/a/1370909/174140 .
174140
@ John que he usado en set-option -glugar de set -g. diferentes versiones de tmux muy probablemente
Ali Amin
setes un alias para set-option.
174140