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

Mou*_*inX 4 tmux

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

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

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

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

Kus*_*nda 10

中的new-sessionsplit-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
Run Code Online (Sandbox Code Playgroud)

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

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

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


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