tmux - スクリプトを介してウィンドウを分割し、SSHを複数のサーバーに分割する

tmux - スクリプトを介してウィンドウを分割し、SSHを複数のサーバーに分割する

現在手動で行う次の手順を自動化したいと思います。

端末で次の手順を実行します。

  1. tmuxの起動
  2. 10個の窓に分かれている
  3. タイル窓
  4. 各ウィンドウに移動してSSHを介してサーバーに接続し、10回繰り返します。
  5. 同期ウィンドウ

10の異なるSSHログインコマンドを含む、これらすべてをスクリプト化する方法はありますか?

答え1

new-sessioncommandは新しいウィンドウで実行されるコマンドをsplit-pane使用します。配列に文字列リストがある場合は、次のことができますtmuxuser@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リスト内のサーバーの1つに実行されるコマンドのリストが生成されますssh_list。最初のサーバー(このコマンドで使用)を除いて、リストされている各サーバーに対してこのようなコマンドを作成しますnew-session

tmux最後のコマンドは新しいセッションを作成し、最初のコマンドを実行してすべての分割を実行し、sshレイアウトtiledに従ってウィンドウを並べ替えます(tmux代替案はマニュアルを参照してください。)ウィンドウ同期を有効にします。

すべてのセッションが終了すると、セッションはtmux終了します。ssh


アップデート:興味深いことに、tmux(1)マニュアルsplit-pane言及されたコマンドはありません。上記のコードはまだ機能しますが、以前のバージョンを使用している場合(2.4以降と同義語)にtmux変更する必要があるかもしれません。split-panesplit-windowtmuxsplit-panesplitpsplit-window

関連情報