我想再次复制我的ssh会话.
例如,我的窗口名称是“user @ host”.我希望按前缀键S在新窗口中执行’ssh user @ host’
$tmux bind S confirm-before "neww ssh #W"
尝试之后,它只发出一个没有’user @ host’选项的ssh命令
CentOS 7上的tmux版本为1.8.
解决方法
你可以试试这样的东西,虽然它有点难看.把它放到你的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,args | ...
按pid排序
... | sort | ...
将输出输入awk
... | awk '...'
找到当前窗格/窗口的tty,并将其放在VAR中(#{}由tmux替换)
$1 ~ /#{pane_pid}/{VAR=$2}
查找具有我们之前找到的tty的进程并且具有以ssh开头的命令.请注意,我们假设ssh会话的pid大于调用它的shell.在大多数情况下应该如此.
$2 ~ VAR && $3 ~ /ssh/{...}
删除pid,然后打印剩余部分.这将是带有所有参数和选项的ssh命令.这是将在新窗口中执行的命令.
$1=\"\"; $2=\"\"; print