Tmux

tmux - 通過腳本將窗格和 ssh 拆分到多個伺服器

  • July 14, 2021

我想自動化我目前手動執行的以下步驟。

在終端中,我執行以下步驟:

  1. 啟動 tmux
  2. 分成 10 個窗格
  3. 平鋪窗格
  4. 導航到每個窗格並 ssh 進入伺服器,重複 10 次
  5. 同步窗格

有沒有辦法編寫所有這些腳本,包括 10 個不同的 ssh 登錄命令?

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

這將創建一個命令列表,這些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)。

引用自:https://unix.stackexchange.com/questions/533655