当 tmux 启动或打开一个新窗口时,它不会加载 my .profile
or .bashrc
. . ~/.bashrc
我每次都打字。有没有办法让这种情况自动发生?
6 回答
是的,在你的末尾.bash_profile
,放一行:
. ~/.bashrc
在通常只处理配置文件的情况下,这会自动获取 rc 文件。
关于何时bash
运行某些文件的规则很复杂,并且取决于正在启动的 shell 的类型(登录/非登录、交互与否等),以及命令行参数和环境变量。
您可以在man bash
输出中看到它们,只需查找INVOCATION
- 您可能需要一些时间来消化和解码它:-)
通过将此行添加到我的 ~/.tmux.conf 文件中,显式运行 bash 对我有用:
set-option -g default-command "exec /bin/bash"
以前的答案提供了解决方案,但没有解释原因。这里是。
这与 Bash 初始化文件有关。默认情况下,~/.bashrc
在交互式非登录shell 中使用。它不会在登录 shell 中获取。Tmux 默认使用登录 shell。因此,shell 由 tmux skip 启动~/.bashrc
。
default-command
外壳命令默认是一个空字符串,它指示 tmux使用该选项的值创建一个登录 shell 。
default-shell
Bash 的初始化文件,
- 登录方式:
/etc/profile
~/.bash_profile
,~/.bash_login
,~/.profile
(只有第一个存在)
- 交互式 非登录:
/etc/bash.bashrc
(一些 Linux;不在 Mac OS X 上)~/.bashrc
- 非交互:
- 源文件在
$BASH_ENV
- 源文件在
奇怪的交互式、非登录加载要求在其他情况下也会使人们感到困惑。最好的解决方案是更改~/.bashrc
as 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 用户在配置文件中进行设置。
参考
- Unix Shell 初始化
man tmux
对我有用的解决方案如下:
.bash_profile
如果您没有文件,请创建一个文件~
- 在
.bash_profile
putsource ~/.bashrc
或source ~/.profile
- 重启 tmux。
现在应该解决这个问题。
我有同样的问题,到目前为止的解决方案对我不起作用。最终为我工作的解决方案可以在这里找到。
简而言之,tmux
windows/sessions 使用登录 shell,~/.profile
它在启动时查找其他文件。
我想要的是让 zsh 从每个新tmux
窗口开始,所以我exec zsh
把~/.profile
.