新的tmux会话(或窗口)上没有加载.bashrc / .profile - 为什么?

时间:2012-03-11 03:19:36

标签: tmux

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

6 个答案:

答案 0 :(得分:128)

是的,在您的.bash_profile结束时,请填写以下行:

. ~/.bashrc

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

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

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

答案 1 :(得分:12)

通过将此行添加到我的〜/ .tmux.conf文件中,运行bash显然对我有用:

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

答案 2 :(得分:1)

从这个帖子:

似乎使用.bash_profile会起作用。

答案 3 :(得分:1)

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

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

该问题现在应该已解决。

答案 4 :(得分:1)

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

这与Bash初始化文件有关。默认情况下,在{strong>交互式非登录外壳中使用~/.bashrc。它不会在登录shell中提供。 Tmux默认使用登录外壳。因此,以tmux开始的shell会跳过~/.bashrc

  

default-command shell命令

     

默认值为空字符串,,它指示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用户在配置文件中对此进行设置。

参考

答案 5 :(得分:0)

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

简而言之,tmux Windows /会话使用登录外壳程序,该外壳程序在启动时会在其他文件中查找~/.profile

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