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?


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


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

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.


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.


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


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


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

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

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.


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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.