tmux未重新连接



我最近从使用screen切换到了tmux(通过macports获得),因为我更喜欢这个功能集。然而,我似乎无法让tmux从另一个位置重新连接,就像我可以屏蔽一样。

在家里的mac上,我将打开iTerm2,我的默认外壳是zsh,我将使用tmux开始tmux会话。我把所有的spit都设置好,ssh到合适的服务器上,等等,然后工作一段时间。该上班了。<C-a> d-tmux分离。

我开始工作,在那里我使用一台windowsxp机器。我点燃油灰,ssh进入家里的mac,尝试tmux attach,得到一条错误消息:

no sessions

我似乎无法确定为什么会发生这种情况。我并不害怕深入研究,但我甚至不知道从哪里开始。想法?

附言:我已经删除了.tmux.conf文件,所以它使用默认配置。

在我的案例中,临时文件夹显然被清理了
这篇博客文章帮助我恢复了"丢失"的会话:

我终于得到了解决方案:发送信号10迫使tmux重新创建套接字。在那之后,我可以再次运行tmux而不会丢失我的会话:

$ killall -10 tmux

tmux将其服务器套接字存储在TMPDIR环境变量指定的目录下的一个目录中。

在GUI会话中,您可能会得到一个TMPDIR,它指向/var(例如/var/folders/mV/mVip4IQ4EXOriTiLJmeSuk+++Tc/-Tmp-/)下的某个位置。

当您通过SSH登录时,可能最终没有设置TMPDIR,因此tmux会在/tmp/下查找其套接字。

在10.6系统上,这是我的TMPDIR,带有zsh/终端,以及zsh/SHS:

% echo local: ${TMPDIR-unset}; ssh localhost 'echo remote: ${TMPDIR-unset}'
local: /var/folders/mV/mVip4IQ4EXOriTiLJmeSuk+++Tc/-Tmp-/
remote: unset

如果您知道TMPDIR需要使用的值,您可以在附加时指定它(或在会话本身之外运行其他tmux命令):

TMPDIR=/var/folders/mV/mVip4IQ4EXOriTiLJmeSuk+++Tc/-Tmp-/ tmux attach

如果您不知道GUI会话使用的目录,您可能可以通过以下方式找到它(语法特定于zsh;它在/var/folders/下搜索当前用户拥有的名为-Tmp-的目录):

echo /var/folders/**/*/-Tmp-(U/)

为了避免将来出现问题,您可能希望在启动服务器之前取消设置TMPDIR(或将其设置为更容易预测的值)。

lsof-U选项列出了打开的套接字文件,因此lsof -U | grep '^tmux'将列出tmux使用的所有套接字。如果您不是以启动tmux的同一用户身份登录,则需要使用sudo

每行的最后一列是文件的名称。您关心的文件以/开头。

您要查找的行将如下所示:

tmux 1234  username 6u unix 0xffffffabcd123456 0t0 /private/var/folders/M8/M8tFwolmH08fOvJ+-35VI++++TM/-Tmp-/tmux-502/default
tmux 56789 username 6u unix 0xffffff123456789a 0t0 /private/tmp/tmux-502/default

我对lsof建议有一个变体,我已经成功地使用它来"恢复"TMPDIR变量,这有助于解决一系列烦恼。我想,这样做的好处是,可以对lsof返回的内容更严格一点,更容易解析出正确的值(在某个时候,一些非典型的字符,但仍然有效,可以输出)。

一个快速的、唯一的班轮是:

$ lsof -Fn -d6 -aUc tmux | grep ^n | cut -c2-
/private/var/folders/_l/f_n8blps05xfnkw6fs3dcn_80000gp/T/tmux-502/default

我使用以下脚本(我想也可以是~/.bash_profile或其他适当位置的函数):

#!/bin/bash
if [[ -z "${TMPDIR}" ]]; then
  while read line; do
      case $line in
      n*) line="${line#n}"
          export TMPDIR="${line%%/tmux-$(id -u)/*}"
          ;;
      esac;
  done < <(lsof -Fn -d6 -aUc tmux)
else
    echo ">> $TMPDIR already defined: $TMPDIR" 1>&2
fi

https://gist.github.com/jps3/769d50a6a7611949473b

相关内容

  • 没有找到相关文章

最新更新