bash - 在 bash 中显示数据网格
问题描述
想就如何在 bash 中最好地做到这一点提出意见,谢谢
对于 x 台服务器,每个服务器都有自己的复制协议列表及其状态。运行一些命令并获取这些数据很容易,例如;
获取服务器、输出(在本地配置文件中/从本地配置文件中设置/变量);
. ./ldap-config ; echo "$MASTER $REPLICAS"
dc1-server1 dc1-server2 dc2-server1 dc2-server2 dc3...
对于dc1-server1,获取协议,输出;
ipa-replica-manage -p $(cat ~/.dspw) list -v $SERVER.$DOMAIN | grep ': replica' | sed 's/: replica//'
dc2-server1
dc3-server1
dc4-server1
对于 dc1-server1,获取协议状态码,输出;
ipa-replica-manage -p $(cat ~/.dspw) list -v $SERVER.$DOMAIN | grep 'status: Error (' | sed -e 's/.*status: Error (//' -e 's/).*//'
0
0
18
因此输出将是基于“获取服务器”列表的几列,每个服务器下的每个“副本:状态”,对于该服务器
希望实现类似的目标;
dc2-server1: 0 dc2-server2: 0 dc1-server1: 0 ...
dc3-server1: 0 dc3-server2: 18 dc3-server1: 13 ...
dc4-server1: 18 dc4-server2: 0 dc4-server1: 0 ...
解决方案
一般eval
被认为是邪恶的。尽管如此,我还是要使用它。
paste
便于并排打印文件。
在您使用文件名的地方可以使用 Bash 进程替换。
所以,我将动态构建一个粘贴命令,然后对其进行评估
我将get.sh
用作您的神秘命令的占位符。
cmd="paste"
while read -ra servers; do
for server in "${servers[@]}"; do
cmd+=" <(./get.sh \"$server\" agreements | sed 's/\$/:/')"
cmd+=" <(./get.sh \"$server\" status)"
done
done < <(./get.sh servers)
eval "$cmd" | column -t
推荐阅读
- c# - 在关闭 WPF 应用程序时处理对 UI 线程应用更改的 Timer
- bash - 卷曲 | jq:解析错误:第 2 行第 0 列的数字文字无效
- jquery - 在 JQuery 中更改表格单元格内的输入值
- c# - VisualStudio Code csharp 调试器生成错误
- phoenix-framework - Phoenix:运行 mix ecto.create 编译 Ranch 依赖项时出错
- python - 使用带有 mayavi 导入的 pyinstaller 创建独立的 exe
- android - Android中地图片段顶部的片段或视图
- python-3.x - 如何在 python 3.5.2 的 urllib.request.urlopen 中使用特殊字符(æ、ø 或 å)?
- variadic-functions - 具有自定义类型的可变 C 函数
- html - 用html中的一行水平链接三个下拉框