tmux相当于“ screen -R”吗?


10

tmux attach命令的作用更像组合screen -rscreen -x-首先它改掉附加到最近分离会话,然后如果没有可用它将附加到当前连接的会话。我想模拟以下行为screen -R:首先尝试附加到一个分离的会话,如果没有分离的会话,则开始一个新的会话。在tmux中实现此目标的最佳方法是什么?

Answers:


12

在咨询了IRC的向导之后,我确信没有单个tmux命令具有此行为。幸运的是,使用shell进行仿真非常容易:

(tmux ls | grep -vq attached && tmux at) || tmux

如果您要启动新会话,请进行较小的编辑以抑制“无法连接到服务器:连接被拒绝”输出:(tmux ls 2>/dev/null | grep -vq attached && tmux at) || tmux
l8nite 2015年

3

尽管在tmux手册中说了什么:

             The target-session rules for attach-session are slightly
         adjusted: if tmux needs to select the most recently used session,
         it will prefer the most recently used unattached session.

Drew的答案在以下情况下无法正常工作:

0: 1 windows (created Wed Nov  7 23:51:08 2012) [177x47]
1: 1 windows (created Wed Nov  7 23:51:33 2012) [177x47] (attached)

tmux at将附加到上一个会话(#1)(即使此会话仍附加在其他位置)。这破坏了运行多个tmux会话并仅附加到独立的会话的整个想法(使用mosh + tmux + iterm2创建完美的漫游终端)。

另一种方法是手动选择未连接的会话:

tmux ls | grep -vq attached && tmux at `tmux ls | grep -vm1 attached | cut -d: -f1`


接得好!该文档与实际行为不同步。我为此创建了一个错误报告
德鲁·弗兰克

已经发布了可解决此问题的补丁程序,因此在下一发行版中,它的行为应与所宣传的一样。
德鲁·弗兰克

是1.8版本的补丁吗?
momeara

2

我通常一次只能有两个tmux会话,因此我在每个终端窗口中都执行类似的操作。

终端窗口0:

tmux attach -t 0 || tmux new

终端窗口1:

tmux attach -t 1 || tmux new

2

这对我来说最有效:

if [ -z "$TMUX" ]; then
     (tmux ls | grep -vq attached && tmux at -t `tmux ls | grep -vm1 attached | cut -d: -f1`) || tmux new
fi

需要-t才能附加到正确的会话。


1

关于什么

tmux attach || tmux new

或者,~/.tmux.conf如果文件不存在,则直接创建该文件,然后添加

new-session

使其在没有运行时创建一个新会话tmux attach

为加上tmux别名也可能很方便tmux attach


第一个建议将附加到当前附加的tmux会话(类似于screen -x),这是我要避免的事情。第二个建议也存在同样的问题,并且当我使用tmux source-file命令重新加载配置时,还会产生创建“额外” tmux会话的不良后果。
德鲁·弗兰克
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.