【发布时间】:2012-07-14 18:46:30
【问题描述】:
如何从 CLI 中任意提取输出?
在我的具体示例中(但答案通常适用于整个示例)我正在尝试为 AWS EC2/EBS 上的 NodeJS/MongoDB 技术堆栈和标准 Ubuntu 服务器操作系统编写一个通用部署/扩展脚本(12.04)。目前,我正在通过 AWS 仪表板控制台手动创建和附加 EBS 驱动器,但其他一切都应该自动发生,而无需通过 SSH 登录并执行愚蠢的 CLI(尽管最终我也想自动化创建和附加部分)。
首先,我需要获取所有要挂载的 EBS 驱动器块 lsblk -l 的列表。
然后我需要(在第一次条件下)设置 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 输出中任意提取信息到变量中?
谢谢。
【问题讨论】:
-
一般来说,以咆哮开始提问并不被认为是一种好的语气。特别是,如果你对别人喜欢的东西大发雷霆,而你又要请同样的人来帮助你。
-
此外,脚本的其余部分在别处,但不在此处。
lsblk输出的示例也会有所帮助 -
1.您问题的第一部分显示了对 IT 的完全无知。 2. 你试过用谷歌搜索吗? Man 3 popen() 会帮助你。
-
尝试将输出通过管道传输到文件中,以便您可以将其作为文件读取
-
@Mouseroot,谢谢。一旦我将它放在一个文件中,除了正则表达式之外,是否有任何工具可以让我检索/提取数据的任意位?类似于将输出转换为 JSON 的工具?
标签: bash variables scripting command-line-interface