在 iTerm2 中,如何使用 -CC 自动连接到现有的 tmux 会话?

在 iTerm2 中,如何使用 -CC 自动连接到现有的 tmux 会话?

我发现使用 iTerm2 并将tmux -CC现有的 iTerm UI 与 tmux 窗口和窗格结合起来非常有帮助。

我正在尝试弄清楚如何在 iTerm 启动时自动附加到现有会话(使用Send text at start:配置文件设置)或者如果不存在则创建一个新的会话。

我看到一些人提出如下建议:

tmux attach -t base || tmux new -s base

但添加 -CC 标志会导致一些奇怪的行为/不起作用。第一次启动时我收到以下错误:

A tmux protocol error occurred.
Reason: %begin with empty command queue

并且 shell (客户端?) 有以下输出:

> tmux -CC attach -t base || tmux -CC new -s base                     
** tmux mode started **

Command Menu
----------------------------
esc    Detach cleanly.
  X    Force-quit tmux mode.
  L    Toggle logging.
  C    Run tmux command.
Detached
** tmux mode started **

Command Menu
----------------------------
esc    Detach cleanly.
  X    Force-quit tmux mode.
  L    Toggle logging.
  C    Run tmux command.
Detached
%output %0 \015\015\033M\033[0m\033[23m\033[24m\033[J\033[36m@\033[32mgloesch\033[m\017 \033[1m\033[34m~\033[m\017 \015\012> \033[K\033[68C\033[31m<system>\033[m\017 \033[m\017\033[77D
%begin 1444229906 14 1
%end 1444229906 14 1
%exit

在此过程中会创建第二个窗口,但一旦一切完成,该窗口就会关闭。

答案1

我建议不要使用 ,而是Send text at start:将命令作为参数传递给 ssh。就我而言,以下方法有效(不过,使用最新的 iTerm2 测试版,因此如果它不适合您,您可能需要尝试升级到该测试版):

ssh -t <user>@<remote> "tmux -CC new -A -s foo"

您可以将其包装成一个函数,并将其放入您的 shell 初始化文件(.zshrc.bashrc)中,以便于调用:

$ cat ~/.zshrc
function cch {
  ssh -t $@ "tmux -CC new -A -s foo"
}
$ cch <user>@<remote>

有关-A切换到该new-session命令的详细信息,请参阅 tmux 手册页,以及iTerm 的 GitLab 上的这个帖子其中 George Nachman 建议使用这个优雅的解决方案-A,它可以与 iTerm 很好地集成。

相关内容