概括
当我创建新的 tmux 会话时,我的提示符会从默认的 bash 配置中提取,并且我必须手动运行自source ~/.bashrc
定义提示符。
分析
我使用的是 RHEL 7 机器。不久前,我在 bash 更新后开始注意到这种行为,但直到现在才抽出时间来问这个问题(并且不确定这是从哪个更新开始发生的)。
例如,我将提示自定义为:
[user@hostname ~]$
每当我启动一个新的 tmux 会话时,它都会使用 bash 默认值:
-sh-4.2$
快速运行source ~/.bashrc
总是可以解决问题,但令人烦恼的是,每次我想修复一些小问题时都必须这样做。关于如何让 tmux 再次自动执行此操作有什么想法吗?
如果需要更多信息,我很乐意提供。
tmux.conf
作为参考,我tmux.conf
在下面提供了我的文件,尽管它很难称为自定义文件。
setw -g mode-keys vi
# reload tmux.conf
bind r source-file ~/.tmux.conf \; display-message " ✱ ~/.tmux.conf is reloaded"
答案1
这与 Bash 初始化文件有关。默认情况下,~/.bashrc
用于交互式、非登录壳。它不会来自登录 shell。 Tmux 使用登录外壳默认情况下。因此,shell 由 tmux skip 启动~/.bashrc
。
default-command
shell命令默认为空字符串,它指示 tmux 创建登录 shell使用选项的值
default-shell
。
Bash 的初始化文件,
- 登录方式:
/etc/profile
~/.bash_profile
,~/.bash_login
,~/.profile
(仅存在第一个)
- 交互的 未登录:
/etc/bash.bashrc
(某些 Linux;不在 Mac OS X 上)~/.bashrc
- 非交互式:
- 源文件在
$BASH_ENV
- 源文件在
解决方案
奇怪的交互式、非登录加载要求在其他情况下也会让人们感到困惑。这最佳解决方案~/.bashrc
是改变as的加载要求仅限互动,这正是某些发行版(例如 Ubuntu)正在做的事情。
# write content below into ~/.profile, or ~/.bash_profile
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
这应该是您想要的解决方案。我建议每个 Bash 用户在配置文件中进行此设置。
更新:以上设置是从Ubuntu复制的。看来他们选择.bashrc
在登录 shell 中加载,无论它是否在交互式 shell 中。
如果您想检测交互式 shell,请使用$PS1
.
if [ -n "$BASH_VERSION" -a -n "$PS1" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
参考
- Unix shell 初始化
- 外壳启动脚本
man tmux
答案2
据我所知,默认情况下tmux
运行登录 shell。当bash
作为交互式登录 shell 调用时,它会查找~/.bash_profile
、~/.bash_login
和~/.profile
。所以你必须放入source ~/.bashrc
这些文件之一。
解决此问题的另一种方法是将以.tmux.conf
下行放入您的文件中:
set-option -g default-shell "/bin/bash"
答案3
将以下内容添加到.tmux.conf
:
set-option -g default-shell "/bin/bash"
才不是产生期望的结果。
只有当添加source "$HOME/.bashrc"
到~/.bash_profile
预期的结果时才能达到。
当打开新窗口或窗格时,以及分离和打开新的 tmux 会话时,这将在活动的 tmux 会话上起作用。
测试于:
VERSION="16.04.2 LTS (Xenial Xerus)"
tmux 2.1
答案4
$HOME/.tmux.conf
使用以下内容修改您的文件:
set-option -g default-shell "/usr/bin/bash"
set-option -g default-command bash
那应该覆盖它。当您这样做时,为什么不将点文件放在$HOME/.config/tmux
它所属的不带点的文件夹中。并且,将颜色输出和重新加载键绑定添加到$HOME/.config/tmux/tmux.conf
:
set -g default-terminal "screen256color"
bind r source-file "${HOME}/.config/tmux/tmux.conf"
如果tmux -V
< 3.1,请添加别名以$HOME/.bashrc
从此位置加载配置文件:
alias tmux="tmux -f ${HOME}/.config/tmux/tmux.conf"
/etc/tmux.conf
或者将其设置为默认位置的系统范围配置。