【问题标题】:Reattached tmux session not importing ~/.bashrc重新附加的 tmux 会话未导入 ~/.bashrc
【发布时间】:2018-11-26 19:04:46
【问题描述】:

我正在使用与 tmux 集成的 iTerm2。我的正常工作模式是首先在我的 Mac 上打开 iTerm2 终端,然后通过 ssh 连接到我的开发虚拟机。

我的开发虚拟机安装了 tmux,因此我可以将 tmux 会话重新附加到我的开发虚拟机。

问题是当我第一次创建 tmux 会话时,它会毫无问题地获取 ~/.bashrc。 但是如果我清理分离 tmux 会话,然后重新附加这些 tmux 会话,则不会获取 ~/.bashrc。

我已经包含了

if [ -f ~/.bashrc ]; then source ~/.bashrc; fi

在 ~/.bash_profile、.profile、.bash_login 中。

还包括

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

到 ~/.tmux.conf

【问题讨论】:

标签: vim tmux iterm2


【解决方案1】:

正如动词“重新连接”所暗示的那样,当您断开连接时,您的 tmux 会话(以及在其中运行的 Bash shell)会继续在您的开发机器上运行,以便您以后可以重新连接到非常同一个会话。 (这是 tmux 的主要特点:通常,shell 直接连接到您的终端或 SSH 会话,因此当您关闭/断开它时,shell 没有任何内容可读取和输出,因此必须退出。tmux 提供中间有一个虚拟终端,所以 shell 有一些东西可以挂在上面(即使没有人看到输出并且当前没有人输入任何东西),并且 tmux 处理会话管理。)

应用程序(如 Bash 和 Vim)通常只在启动时读取它们的配置。由于 Bash 一直在运行(您可以通过 ps -o etime --pid $$ 进行验证),它不会注意到您正在通过 tmux 重新连接,并且没有理由重新加载其配置 - 仍然应该在 tmux 会话中定义和保存所有内容。如果您需要重新加载(更改的)配置,您必须明确地执行此操作 (source ~/.bashrc),或者打开一个新的 shell。

【讨论】:

  • 您好 Ingo,感谢您抽出宝贵时间回答我的问题。根据您的评论,我做了一些实验。更具体地说,我的问题只发生在使用 iTerm2 的 Tmux 集成时。这意味着:1)如果我使用标准的 Tmux 语法,假设我使用 tmux 创建一个 tmux 会话,然后使用 tmux detach 分离,然后使用 tmux attach -t 0 重新连接。一切正常 2) 如果我重新连接 iTerm2 与 tmux -CC attach 的 tmux 集成,我在 ~/.bashrc 中定义的 base16 shell 没有来源,并且我的 vim 配色方案搞砸了。我需要手动获取 .bashrc
  • 啊,有趣的发现。不幸的是,我对 iTerm2 无话可说。但是鉴于您的设置已经消失,这仍然意味着里面的外壳是新的,而不是原来的,对吧?这听起来不像 attach 工作正常。
  • 正确。而且,虽然 base16 shell 的来源不正确,但 .bashrc 设置的其余部分来源正确......然后我将与 iTerm2 团队交谈
  • hi ingo 我想通了,请看gitlab.com/gnachman/iterm2/issues/7367
猜你喜欢
  • 2023-03-14
  • 1970-01-01
  • 2014-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-31
  • 1970-01-01
相关资源
最近更新 更多