234

On a new setup, tmux is using bash instead of my default (zsh).

How can I force it to use zsh?

Gareth
  • 19,080
re5et
  • 2,453

13 Answers13

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

in ~/.tmux.conf or /etc/tmux.conf. Works on Fedora.

You can reload the config with <leader>: source-file <conf file> e.g.

<C-b>: source-file ~/.tmux.conf

You would need to do it for every tmux instance. Otherwise you may restart tmux with killall tmux; tmux

Alex Hammel
  • 3,164
62

First, ensure your default shell is set properly to zsh by running this in your command line:

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

Placing the following in your ~/.tmux.conf is a more robust option for any shell.

set-option -g default-shell $SHELL
NotTheDr01ds
  • 28,025
DebugXYZ
  • 794
29

For MacOS users, drop this line in the bottom of your ~/.tmux.conf

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

After you add that, kill and restart your tmux server and all should work.

NotTheDr01ds
  • 28,025
16

tmux appears to use the SHELL environment variable, so the following should work:

SHELL=/usr/bin/zsh tmux

or

env SHELL=/usr/bin/zsh tmux
blueyed
  • 1,241
10

If you want to force tmux to use the same shell as specified in your environment variable, you could use:

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

in your ~/.tmux.conf or /etc/tmux.conf.

To get the change to actually take effect, you may need to tmux kill-server and then tmux to restart tmux.

mareoraft
  • 280
7

The accepted answer did not work for me.

I had to write both

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

and

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

in my ~/.tmux.conf — Dont forget to run the following commands to reload the tmux.conf:

tmux kill-server; tmux

Im am using tmux -V 2.6 under Ubuntu 18 in the gnome-shell emulator.

I also enhanced tmux with https://github.com/samoshkin/tmux-config. Check it out, it's really cool.

Dmitry
  • 103
Wu Wei
  • 181
3

Use chsh(1):

chsh -s /bin/zsh $USER
2

Log-out and log-in again fixed my problem. When echoed $SHELL it was still /bin/bash but after log-out it was changed to /usr/bin/zsh

nKn
  • 5,832
2

For me I had to replace:

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

with

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

in .tmux.conf and run command tmux kill-server; tmux

Ali Amin
  • 121
2

Add this into your ~/.tmux.conf

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

I wanted it to force to use an custom .bashrc. The following should work for any shell. My new is .tmux-bashrc is just an copy of .bashrc , minus the ncal or cowsay, etc... The speed improvements are now apparent.

in ~/.tmux.conf

set-option -g default-shell $SHELL
set-option -g default-command "$SHELL --init-file .tmux-bashrc"
0

As for me, I use Arch Linux inside Windows WSL2 and I have done chsh -s /bin/zsh $USER and when entering tmux it would not correctly load zsh(show some errors e.g. add-zsh-hook function definition file not found and so on. If I enter zsh manually again, everything works fine. And I found that inside ~/.tmux.conf add one line set -g default-command /bin/zsh should be the answer to fix this problem but I don't know why setting default-shell or setting SHELL variable was in vain.

FYI, tmux(1) — Linux manual page

d0zingcat
  • 131
0

on fedora and rocky linux

chsh -s /bin/zsh $USER
tmux kill-server; 

then

tmux

good luck