该tmux attach
命令的作用更像是screen -r
和的组合screen -x
——首先,它尝试附加到最近的分离的会话,然后如果没有可用的会话,它将附加到当前附加的会话。我想模拟以下行为screen -R
:首先尝试附加到分离的会话,然后如果没有分离的会话,则启动新会话。在 tmux 中实现此目的的最佳方法是什么?
答案1
在咨询了 IRC 的专家后,我确信没有任何一个 tmux 命令具有这种行为。幸运的是,使用 shell 模拟起来相当容易:
(tmux ls | grep -vq attached && tmux at) || tmux
答案2
尽管 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`
答案3
我倾向于一次只进行两个 tmux 会话,因此我在每个终端窗口中都执行类似这样的操作。
终端窗口 0:
tmux attach -t 0 || tmux new
终端窗口 1:
tmux attach -t 1 || tmux new
答案4
关于什么
tmux attach || tmux new
~/.tmux.conf
或者如果文件不存在则创建它,然后添加
new-session
对其进行设置,以便在运行时如果没有会话,则会创建一个新的会话tmux attach
。
tmux
为 创建一个别名可能也会很方便tmux attach
。