tmux - 通过脚本分割窗格和 ssh 到多个服务器

tmux - 通过脚本分割窗格和 ssh 到多个服务器

我想自动执行我当前手动执行的以下步骤。

在终端中,我执行以下步骤:

  1. 启动tmux
  2. 分成 10 个窗格
  3. 平铺窗格
  4. 导航到每个窗格并通过 ssh 连接到服务器,重复 10 次
  5. 同步窗格

有没有办法编写所有这些脚本,包括 10 个不同的 ssh 登录命令?

答案1

new-session和命令split-pane采用tmux在新窗格中运行的命令。如果user@server数组中有一个字符串列表,您可以这样做:

#!/bin/bash

ssh_list=( user1@server1 user2@server2 ... )

split_list=()
for ssh_entry in "${ssh_list[@]:1}"; do
    split_list+=( split-pane ssh "$ssh_entry" ';' )
done

tmux new-session ssh "${ssh_list[0]}" ';' \
    "${split_list[@]}" \
    select-layout tiled ';' \
    set-option -w synchronize-panes

这将创建一个命令列表split-pane,这些命令拆分当前窗格并运行ssh到列表中的服务器之一ssh_list。我们为每个列出的服务器创建一个这样的命令,第一个服务器除外(我们将与该new-session命令一起使用)。

tmux最后的命令创建一个新会话并运行第一个命令ssh,执行所有拆分,根据tiled布局重新排列窗格(请参阅tmux手册了解替代方案),并启用窗格同步。

一旦所有会话都终止,会话tmux就会终止。ssh


更新:有趣的是,tmux(1)手册没有提到split-pane命令。上面的代码仍然有效,但如果您使用的是旧版本的tmux,您可能需要更改split-panesplit-window(自tmux2.4 起,split-panesplitp是 的同义词split-window)。

相关内容