![tmux - 通过脚本分割窗格和 ssh 到多个服务器](https://linux22.com/image/158370/tmux%20-%20%E9%80%9A%E8%BF%87%E8%84%9A%E6%9C%AC%E5%88%86%E5%89%B2%E7%AA%97%E6%A0%BC%E5%92%8C%20ssh%20%E5%88%B0%E5%A4%9A%E4%B8%AA%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
我想自动执行我当前手动执行的以下步骤。
在终端中,我执行以下步骤:
- 启动tmux
- 分成 10 个窗格
- 平铺窗格
- 导航到每个窗格并通过 ssh 连接到服务器,重复 10 次
- 同步窗格
有没有办法编写所有这些脚本,包括 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-pane
为split-window
(自tmux
2.4 起,split-pane
和splitp
是 的同义词split-window
)。