我目前已经在 tmux 会话中弹出新的 Konsole 实例,无论是新的还是附加的,因为 tmux 很棒并且您应该始终在 tmux 内部,对吗?
但是,如果我想连接到远程管理的 tmux 会话,这会让我陷入困境。目前,我不得不在打开新的 Konsole 窗口之前计划,这个窗口不应由本地 tmux 管理,而是打开一个普通的 bash 提示符,我可以从中“ssh host_foo -e tmux 附加”。
理想情况下,我希望能够分离当前的 tmux 客户端进程,并自动继续 ssh 和远程 tmux 调用,这将基于会话中发出的任何命令。我希望交互工作如下:
[me@local] ~ $ tmux attach
.... pop into local tmux session ....
[me@local] ~/tmuxdir $ ls
tmuxfile1 tmuxfile2
[me@local] ~/tmuxdir $ detach-and-ssh foo
.... pops out of local tmux session ....
.... and into remote tmux session on host foo ....
[me@foo] ~ $ ls
remotefile1 remotefile2
[me@foo] ~ $ tmux detach
.... pops out of remote tmux session ....
.... and back into local tmux session ....
[me@local] ~/tmuxdir $
我觉得这可以通过编写一个包装器脚本来首先调用“tmux 附加”来实现,该脚本将查找在分离时调用的命令。这可以通过 detach-and-ssh 脚本写入文件。最后,在 detach-and-ssh 的外部部分(即 ssh)完成后,脚本将再次循环回到 tmux 附加。
只要一次只运行一个 detach 命令,一个 post-detach 命令就足够了。但是,最好确保 post-detach 脚本仅限于此 tmux 客户端。如果会话/客户端对特定包装器 PID 有所了解(可能通过环境变量或其他 tmux 变量),那么 post-detach 命令可以写入特定于 PID 的文件中。
是否有人尝试过这样的事情?如果尝试过,那么从中得到了什么教训?
注意:请不是建议在我的本地 tmux 下运行所有远程连接窗口。本地 tmux 位于休眠的笔记本电脑上,此时我所有正在运行的远程会话都将丢失。远程会话确实需要由远程 tmux 管理。
谢谢!
答案1
或者,你可以嵌套 tmux 会话。只需在本地 tmux 中创建一个新屏幕,然后 ssh 到远程富并附加到远程 tmux 会话。分离或终止本地会话不会终止远程会话。
笔记:要将 tmux 命令发送到嵌套会话,请按两次Ctrl+ B(或n次,如果你有n嵌套会话)。