Como posso fazer o tmux usar meu shell padrão?

155

Em uma nova configuração, o tmux está usando o bash em vez do meu padrão (zsh).

Como posso forçá-lo a usar o zsh?

re5et
fonte
12
percebi isso. Pode definir o seguinte em tmux config: definir -g default-comando / bin / zsh definir -g default-shell / bin / zsh
re5et
4
FWIW, você não precisa definir o comando padrão se tiver definido o shell padrão.
Nicholas Riley

Respostas:

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

em ~/.tmux.confou /etc/tmux.conf. Funciona no Fedora.

Pode ser necessário reiniciar o tmux com killall tmux; tmux

Alex Hammel
fonte
5
Se isso não funcionar, certifique-se de reiniciar tmux. Parece óbvio, mas me levou uma boa hora para descobrir!
Andy Smith
27
BTW: Reiniciar o tmux significa killall tmux; tmux. Demorei um pouco para descobrir.
js-codificador
5
As configurações podem ser recarregadas sem matar um servidor:bind R source-file ~/.tmux.conf \; display-message " Config reloaded..".
ДМИТРИЙ МАЛИКОВ
14
Ou simplesmente execute a tmux source-file ~/.tmux.confpartir da linha de comando.
Petr Pudlák
12
@ js-coder: para matar o seu servidor tmux de forma mais limpa, eu recomendo tmux kill-server.
Chuim 13/02/2015
41

Primeiro, verifique se o shell padrão está definido corretamente como zsh, executando-o na linha de comando:

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

Colocar o seguinte no seu ~ / .tmux.conf é uma opção mais robusta para qualquer shell.

set-option -g default-shell $SHELL
DebugXYZ
fonte
1
Não é necessário configurar o usuário shell ( chsh -s), pois o tmux oferece uma opção independente disso.
Mahmoud Al-Qudsi
Eu pensei que era mais robusto usar a variável $ SHELL. Mas adiciona um passo extra e confusão, por isso prefiro a resposta aceita.
DebugXYZ 13/01
Isso é melhor que a resposta aceita. Meu zsh não está instalado em / bin / zsh.
HappyFace
20

Largue esta linha no fundo do seu ~/.tmux.conf

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

Depois de adicionar isso, mate e reinicie o servidor tmux e tudo deve funcionar.

Wyattdanger
fonte
2
Er, há alguma indicação de que o re5et (o OP) esteja em um Mac ou esse programa wrapper esteja instalado?
31412 Chris Chrissen
1
Eu acho que essa resposta só funciona no Mac OS X
EhevuTov
5
tmux kill-serveré o comando para acabar com todos os servidores tmux
Keith Smiley
1
Embora não tenha sido a resposta solicitada pelo OP, acabei neste tópico e, de fato, estou no OS X, usando este wrapper, e esta é a solução que eu precisava; então obrigado!
Jose Alban
1
como isso difere set-option -g default-shell ? o acima não parece funcionar com a casca do peixe.
Tommy
5

Se você deseja forçar o tmux a usar o mesmo shell especificado na sua variável de ambiente, você pode usar:

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

no seu ~/.tmux.confou /etc/tmux.conf.

Para que a alteração entre em vigor, você pode precisar tmux kill-servere tmuxreiniciar o tmux.

mareoraft
fonte
1
Esta é a única resposta que funcionou para mim (o comando tmux kill-server)
indefinido
2

Use chsh(1):

chsh -s /bin/zsh $USER
anfetamaquina
fonte
1
Eu já tinha esse conjunto, mas o tmux estava ignorando.
re5et
2

Sair e entrar novamente corrigiram meu problema. Quando ecoou $SHELL, ainda estava /bin/bashmas, após o logout, foi alterado para/usr/bin/zsh

Patrick Cho
fonte
2

O tmux parece usar a SHELLvariável de ambiente, portanto, o seguinte deve funcionar:

SHELL=/usr/bin/zsh tmux

ou

env SHELL=/usr/bin/zsh tmux
azulado
fonte
Não sei por que isso foi rejeitado. Parece estar correto: um problema comum é usar um shell diferente para, por exemplo, o iTerm, mas deixar o shell de login /bin/bashpara garantir que não haja interrupções não iterativas. O iTerm não será definido $SHELLcomo o novo nome do shell (não sei por que) e a inicialização do bash o definirá para o shell de login, se não estiver definido na inicialização. O tmux usa esse valor se default-shellnão for definido explicitamente.
Sam Brightman
Sim .. talvez env SHELL=/usr/bin/zsh tmuxseja melhor? (atualizou a resposta).
blueyed 6/11/16
1

Adicione isso ao seu ~/.tmux.conf

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

A resposta aceita não funcionou para mim.

Eu tive que escrever ambos

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

e

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

no meu ~/.tmux.conf- Não esqueça tmux kill-server; tmuxde recarregar o tmux.conf


Estou usando o tmux -V2.6 no Ubuntu 18 no emulador de gnome-shell.

Também aprimorei o tmux com https://github.com/samoshkin/tmux-config . Confira, é muito legal.

anarchist912
fonte
0

Para mim eu tive que substituir:

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

com

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

.tmux.conf comando in e runtmux kill-server; tmux

Ali Amin
fonte
Esta é uma duplicata da resposta superuser.com/a/1370909/174140 .
174140 18/09
@ john eu usei em set-option -gvez de set -g. versões diferentes do tmux provavelmente
Ali Amin
seté um alias para set-option.
174140 19/09