【问题标题】:.bashrc/.profile is not loaded on new tmux session (or window) -- why?.bashrc/.profile 未在新的 tmux 会话(或窗口)上加载——为什么?
【发布时间】:2012-03-11 03:19:35
【问题描述】:

tmux 启动或打开新窗口时,不会加载我的.profile.bashrc。我最终每次都输入. ~/.bashrc。有没有办法让这种情况自动发生?

【问题讨论】:

    标签: tmux


    【解决方案1】:

    是的,在您的.bash_profile 末尾添加以下行:

    . ~/.bashrc
    

    这会在通常只处理配置文件的情况下自动获取 rc 文件。

    bash 何时运行某些文件的规则很复杂,取决于启动的 shell 类型(登录/非登录、交互与否等),以及命令行参数和环境变量.

    您可以在 man bash 输出中看到它们,只需查找 INVOCATION - 不过您可能需要一些时间来消化和解码它 :-)

    【讨论】:

    • 这个解决方案的问题是在某些系统上,.bashrc 调用了.bash_profile。
    • 让我纠正一下自己:系统没有 .bashrc 调用 .bash_profile,但您需要确保不是自己做的。
    • @Honza,这将是一个最不寻常的设置,因为它几乎总是相反。有人当然可以安排这样做,但我们不得不质疑他们的理智:-)
    • 确实,原来我已经安排这样做(并忘记了它)。欢迎你质疑我的理智...... ;)
    • 我以为是这个问题....bashrc/.profile is not loaded on new tmux session (or window) — why?
    【解决方案2】:

    以前的答案提供了解决方案,但没有解释原因。在这里。

    这与 Bash 初始化文件有关。默认情况下,~/.bashrc 用于 交互式、非登录 shell。它不会在登录 shell 中获取。 Tmux 默认使用 login shell。因此,由 tmux 启动的 shell 会跳过 ~/.bashrc

    default-commandshell-command

    默认为空字符串,指示 tmux 使用 default-shell 选项的值创建登录 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的加载要求更改为仅交互,这正是某些发行版(如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 用户在配置文件中进行设置。

    参考文献

    【讨论】:

    • 这是一个很好的解释,在阅读了一堆试图理解这一切的东西后终于帮助了我,谢谢
    【解决方案3】:

    通过将此行添加到我的 ~/.tmux.conf 文件中,明确地运行 bash 对我有用:

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

    【讨论】:

    • 这对我有用!但是,您不需要“执行”部分。我在~/.tmux.conf 中添加了以下行:set -g default-command "/bin/bash"。谢谢老兄。
    • 但是,你知道为什么会这样吗?从 Ubuntu 16.04 升级到 18.04.2 后,我突然注意到了这一点。这是我能想到的唯一区别。另外,我注意到一些配置坏了,我不得不遵守一些新的语法(好像 tmux 也更新了,但我不记得我以前用来验证的 tmux 版本)。
    【解决方案4】:

    对我有用的解决方案如下:

    • 如果~ 中没有文件,请创建.bash_profile 文件
    • .bash_profile 末尾放source ~/.bashrcsource ~/.profile
    • 重启 tmux。

    这个问题现在应该已经解决了。

    【讨论】:

      【解决方案5】:

      来自这个帖子:

      似乎使用.bash_profile 会起作用。

      【讨论】:

      • 链接只是给出使用建议:$echo case $- in *i*) . ~/.bashrc;; esac >> .bash_profile
      【解决方案6】:

      我遇到了同样的问题,到目前为止的解决方案对我不起作用。可以找到最终为我工作的解决方案here

      简而言之,tmux windows/sessions 使用登录 shell,它在启动时在其他文件中查找 ~/.profile

      我想要让 zsh 从每个新的tmux 窗口开始,所以我将exec zsh 放在~/.profile 的底部。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-28
        • 1970-01-01
        • 1970-01-01
        • 2019-01-17
        • 2012-05-05
        • 1970-01-01
        • 2013-11-03
        • 2020-07-05
        相关资源
        最近更新 更多