概括

概括

概括

当我创建新的 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-commandshell命令

默认为空字符串,它指示 tmux 创建登录 shell使用选项的值default-shell

Bash 的初始化文件,

  1. 登录方式:
    1. /etc/profile
    2. ~/.bash_profile, ~/.bash_login, ~/.profile(仅存在第一个)
  2. 交互的 未登录:
    1. /etc/bash.bashrc(某些 Linux;不在 Mac OS X 上)
    2. ~/.bashrc
  3. 非交互式:
    1. 源文件在$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

参考

答案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或者将其设置为默认位置的系统范围配置。

相关内容