如何使tmux使用默认外壳?


155

在新设置中,tmux使用bash代替了我的默认设置(zsh)。

如何强制它使用zsh?


12
弄清楚了。可以在tmux配置中设置以下内容:set -g default-command / bin / zsh set -g default-shell / bin / zsh
re5et

4
FWIW,如果您已设置default-shell,则无需设置default-command。
尼古拉斯·赖利

Answers:


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

~/.tmux.conf或中/etc/tmux.conf。适用于Fedora。

您可能需要重新启动tmux killall tmux; tmux


5
如果这对您不起作用,请确保已重新启动tmux。似乎很明显,但是花了我一个小时才弄清楚!
安迪·史密斯

27
顺便说一句:重新启动tmux意味着killall tmux; tmux。花了我一段时间才弄清楚。
js-coder

5
CONFIGS可以不杀死服务器重装:bind R source-file ~/.tmux.conf \; display-message " Config reloaded..".
ДМИТРИЙМАЛИКОВ

14
或者直接从命令行运行tmux source-file ~/.tmux.conf
PetrPudlák2014年

12
@ js-coder:我建议tmux kill-server改用更干净的方式杀死tmux服务器。
Chuim 2015年

41

首先,通过在命令行中运行以下命令,确保将默认shell正确设置为zsh:

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

对于任何shell,将以下内容放入〜/ .tmux.conf中都是更可靠的选择。

set-option -g default-shell $SHELL

1
chsh -s由于tmux提供了独立于此的选项,因此无需设置用户shell()。
马哈茂德·古德西

我认为使用$ SHELL变量更可靠。但这增加了一个额外的步骤和混乱,所以我更喜欢公认的答案。
DebugXYZ

这比公认的答案更好。我的zsh未安装在/ bin / zsh中。
HappyFace

20

将此行放在您的底部 ~/.tmux.conf

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

添加完之后,请杀死并重新启动tmux服务器,一切都应正常工作。


2
嗯,是否有任何迹象表明re5et(OP)在Mac上,或者已安装该包装程序?
克里斯·约翰森

1
我认为此答案仅适用于Mac OS X
EhevuTov 2013年

5
tmux kill-server是结束所有tmux服务器的命令
Keith Smiley 2013年

1
尽管这不是OP所要求的答案,但我还是进入了这个线程,的确确实在OS X上,使用了这个包装器,这是我需要的解决方案。所以谢谢!
Jose Alban

1
set-option -g default-shell 有何不同?以上似乎不适用于Fish壳。
汤米

5

如果要强制tmux使用与环境变量中指定的外壳相同的外壳,则可以使用:

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

在您~/.tmux.conf或中/etc/tmux.conf

要获得真正改变生效,你可能需要tmux kill-servertmux重新启动TMUX。


1
这是唯一对我有用的答案(tmux kill-server命令)
未定义,


2

注销并再次登录解决了我的问题。当回显时,$SHELL它仍然存在,/bin/bash但注销后更改为/usr/bin/zsh


2

tmux似乎使用了SHELL环境变量,因此以下方法应该起作用:

SHELL=/usr/bin/zsh tmux

要么

env SHELL=/usr/bin/zsh tmux

不知道为什么这被否决了。看来是正确的:一个常见问题是对iTerm使用不同的外壳,但保留登录外壳/bin/bash以确保没有非迭代中断。iTerm不会设置$SHELL为新的外壳程序名称(不确定原因),并且bash初始化会将其设置为登录外壳程序(如果在启动时未设置)。如果default-shell未明确设置,则tmux将使用此值。
山姆·布莱曼

是的..也许env SHELL=/usr/bin/zsh tmux更好?(更新了答案)。
2016年


1

接受的答案对我不起作用。

我都必须写

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

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

在我的~/.tmux.conf—不要忘记tmux kill-server; tmux,重新加载tmux.conf


我正在tmux -Vgnome-shell模拟器中的Ubuntu 18下使用2.6。

我还通过https://github.com/samoshkin/tmux-config增强了tmux 。看看,真的很棒。


0

对我来说,我不得不替换:

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

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

.tmux.conf 并运行命令tmux kill-server; tmux


这是答案superuser.com/a/1370909/174140的副本。
174140

@john我用set-option -g代替了set -g。tmux的不同版本很有可能
Ali Amin

set是的别名set-option
174140
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.