102

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

4

6 回答 6

158

是的,在你的末尾.bash_profile,放一行:

. ~/.bashrc

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

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

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

于 2012-03-11T03:38:49.887 回答
20

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

set-option -g default-command "exec /bin/bash"
于 2017-11-15T21:08:40.000 回答
13

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

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

default-command外壳命令

默认是一个空字符串,它指示 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

奇怪的交互式、非登录加载要求在其他情况下也会使人们感到困惑。最好的解决方案是更改~/.bashrcas interactive only的加载要求,这正是某些发行版(如 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 用户在配置文件中进行设置。

参考

于 2019-09-11T07:28:12.237 回答
1

从这个线程:

似乎使用.bash_profile会工作。

于 2012-03-11T03:31:30.323 回答
1

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

  • .bash_profile如果您没有文件,请创建一个文件~
  • .bash_profileputsource ~/.bashrcsource ~/.profile
  • 重启 tmux。

现在应该解决这个问题。

于 2018-12-05T08:05:24.130 回答
0

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

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

我想要的是让 zsh 从每个新tmux窗口开始,所以我exec zsh~/.profile.

于 2018-07-24T09:51:58.660 回答