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


94

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

Answers:


146

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

. ~/.bashrc

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

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

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


2
此解决方案的问题在于,在某些系统上,.bashrc调用.bash_profile。
Honza 2013年

1
让我纠正一下自己:系统没有.bashrc调用.bash_profile,但是您需要确保自己没有做自己。
Honza

1
@Honza,这将是最不寻常的设置,因为几乎总是相反。肯定有人可以这样做,但我们不得不质疑他们的理智:-)
paxdiablo

2
确实,事实证明,我已经安排过这样做(忘记了)。欢迎您质疑我的理智...;)
Honza 2013年

3
我认为这是个问题…….bashrc/.profile is not loaded on new tmux session (or window) — why?
dylnmc

16

通过将以下行添加到我的〜/ .tmux.conf文件中,运行bash对我明确起作用:

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

1
这对我有用!但是,您不需要“ exec”部分。我在我的电脑上增加了以下一行~/.tmux.conf set -g default-command "/bin/bash"。谢了哥们。
小丑

但是,您知道为什么会这样吗?从Ubuntu 16.04升级到18.04.2。后,我突然注意到了这一点。这是我能想到的唯一区别。另外,我注意到某些配置已损坏,我必须遵守一些新语法(似乎tmux也已更新,但我不记得以前用来验证的tmux版本)。
小丑

6

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

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

default-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用户在配置文件中对此进行设置。

参考文献



1

适用于我的解决方案如下:

  • .bash_profile如果没有文件,则创建一个文件~
  • .bash_profile看跌期权source ~/.bashrcsource ~/.profile
  • 重新启动tmux。

现在应该解决此问题。


0

我遇到了同样的问题,到目前为止,解决方案对我而言并不奏效。最终对我有用的解决方案可以在这里找到。

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

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

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.