我发现使用 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 很好地集成。