On a new setup, tmux is using bash instead of my default (zsh).
How can I force it to use zsh?
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
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
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.
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
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.
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.
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
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
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"
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.
on fedora and rocky linux
chsh -s /bin/zsh $USER
tmux kill-server;
then
tmux
good luck