-4

您如何从 CLI 中任意提取输出?

在我的具体示例中(但答案应该普遍适用于整体)我正在尝试使用标准 Ubuntu 服务器操作系统(12.04)为 AWS EC2/EBS 之上的 NodeJS/MongoDB 技术堆栈编写一个通用部署/扩展脚本. 目前,我正在通过 AWS 仪表板控制台手动创建和附加 EBS 驱动器,但其他一切都应该自动发生,而无需通过 SSH 登录并执行愚蠢的 CLI(尽管最终我也想自动化创建和附加部分)。

因此,首先,我需要获取所有lsblk -l要挂载的 EBS 驱动器块的列表。然后我需要(在第一次条件下)设置 MDADM 和 LVM,但是它们的命令假定我知道块的名称,例如:

sudo mdadm --create --verbose /dev/md0 --level=10 --chunk=256 --raid-devices=4 /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdb4

等等。这很好也很简单......如果我是一个通过 lsblk 的 CLI 输出阅读的人。但是如何动态地解析/提取和迭代它呢?不知何故我需要这样做(伪代码):

$EBS_ARRAY = lsblk -l -list_the_names_of_blocks_not_mounted
sudo mdadm --create --verbose /dev/md0 --level=10 --chunk=256 --raid-devices=EBS_ARRAY.length EBS_ARRAY.join(' ')
...rest of my script here...

您显然可以看到我是一个 javascript 人,不知道如何在没有 JSON 和非交互式(脚本)的情况下动态地使用 CLI。那么...您究竟如何以自动方式从 CLI 输出中任意提取信息到变量中?

谢谢。

4

1 回答 1

1

如果您想在 bash 脚本中解析命令的输出,有几个实用程序,如grep, sed,awk以及shell builtins,它们有助于根据您的需要操作字符串。

另一方面,您不能真正在 bash 脚本中进行 GUI 编程。对于简单的 GUI,您可以检查zenity您是否在 Gnome 下。

如果您必须设计高级 GUI,您可以考虑使用类似pythonwithtkinter或其他图形库的编程语言。

如果您必须在服务器上运行这些 CLI 命令,您可以在 python 中编写应用程序,使用服务器端的cgi/json模块和 javascript/ajax 作为主要处理语言。

顺便说一句,手册页并没有那么糟糕,并且参数语法在所有命令中都相当一致。

于 2012-07-15T21:21:00.913 回答