bash - 将文件中的内容复制/粘贴到多个 tmux ssh 会话中
问题描述
我有一个包含 IP 地址列表的文件,例如名为 IP_LIST 的文件。我的目标是遍历每个 IP 并将其复制到多个 tmux 窗格(每个窗格 1 个 IP)。下面的脚本假定您已经在一个 tmux 会话中。我很难将 IP 复制到剪贴板,然后将其粘贴到每个窗格。我确定我需要以某种方式合并 tmux-buffer。我希望有人能指出我正确的方向。
目前,该脚本执行以下操作:
- 读取 IP_LIST 文件
- 根据 IP 地址的数量拆分窗格。
- ssh 进入指定的主机。(我在 /etc/ssh /config 中将主机配置为“mc”作为我的默认值)
while IFS= read -r ip || [[ -n "$ip" ]]; do
echo "$ip" | xclip -selection clipboard
tmux split-window -v; tmux send-keys "ssh mc" ; tmux send-keys "KPEnter"
tmux bind C-b run "tmux set-buffer \"$(xclip -o)\"; tmux paste-buffer"
done < "$1"
IP_list
1.2.3.4
4.3.2.1
6.7.8.9
可以使用以下命令运行:
./tmux_ip_script IP_LIST
编辑:用 tmux 缓冲区更新了脚本。但是,不会复制到每个窗格。
解决方案
我有类似的东西。我将它与另一个以 IP 地址作为第一列的函数一起使用。我称我为“so.sh”(用于 ssh 打开)。它使用发送密钥。在这种情况下,您将使用cat <myfile> | so.sh
它会打开一个新的 tmux 窗口,其中包含一个新窗格,每个窗格都有一个 ssh 会话。也许它可以根据您的需要进行修改。
#!/bin/bash
# so.sh => ssh open
# takes piped input, creats a new tmux window, and then
# uses first column to open a new tmux pane with an ssh session to each pane
if ! [ -n "$TMUX" ]; then
echo "This must be run from a tmux session"
exit 0
fi
base="so"
ipList=""
while read -r data; do
ipList+=$(echo $data | awk '{print $1}')" "
done
tmux new-window -n $base
p=1
for ip in $ipList; do
if [[ $p > 1 ]]; then
tmux splitw -v -t "$base" # vertical split
tmux select-layout -t "$base" even-vertical
fi
tmux send-keys -t "$base.$p" "ssh $ip" enter
((p++))
done
推荐阅读
- r - 与 R 中不存在的对象求和
- r - 从R中的节点信息创建边缘数据框?
- php - sqlsrv.so 和 pdo_sqlsrv.so 的 PHP 扩展导致找不到库依赖项
- asp.net-core - 第 3 方库中的错误导致发布挂起
- java - 如何记录 ListenableFuture returnType?
- java - 如何单击地图中的切换全屏按钮。我的地图类似于我在问题中添加的链接
- java - java.lang.RuntimeException:java.lang.Integer 不是 bigint 架构的有效外部类型:java.io.IOException
- nuxt.js - 通过 nuxt 中间件根据用户的角色重定向用户
- typescript - 如何制作不需要在导入中添加“.default”的 ESM/CJS 模块
- angular - 为什么 Angular 语言环境定义文件与 registerLocaleData 的语言环境标识符不匹配