如何在tmux上复制ssh会话

时间:2014-09-04 05:09:11

标签: tmux

我想再次复制我的ssh会话。

例如,我的窗口名称为“user @ host”。我希望按前缀键+ S在新窗口中执行'ssh user @ host'

$ tmux bind S confirm-before "neww ssh #W"

尝试此操作后,它只发出一个没有'user @ host'选项的ssh命令 CentOS 7上的tmux版本为1.8。

1 个答案:

答案 0 :(得分:4)

你可以试试这样的东西,虽然它有点难看。将其放入tmux.conf

bind S neww "$(ps -ao pid,tty,args | sort | awk '$1 ~ /#{pane_pid}/{VAR=$2} $2 ~ VAR && $3 ~ /ssh/{$1=\"\"; $2=\"\"; print}')"

解释

创建一个名为S的绑定,并使用该参数作为初始命令打开一个新窗口

bind S neww "..."

执行内部命令的输出

$(...)

列出所有进程的pid,tty和command(带参数)

ps -ao pid,tty,args | ...

按pid排序

... | sort | ...

将输出输入awk

... | awk '...'

找到当前窗格/窗口的tty,并将其放在VAR中(#{}替换为tmux)

$1 ~ /#{pane_pid}/{VAR=$2}

查找具有我们之前找到的tty并且具有以ssh开头的命令的进程。请注意,我们假设ssh会话的pid大于调用它的shell。在大多数情况下应该如此。

$2 ~ VAR && $3 ~ /ssh/{...}

删除pid,tty,然后打印剩余部分。这将是带有所有参数和选项的ssh命令。这是将在新窗口中执行的命令。

$1=\"\"; $2=\"\"; print