【问题标题】:How to assign CLI variables from CLI output如何从 CLI 输出分配 CLI 变量
【发布时间】: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


【解决方案1】:

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

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

如果您必须设计高级 GUI,您可以考虑使用像 python 这样的编程语言和 tkinter 或其他图形库。

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

顺便说一句,手册页还不错,而且参数语法在所有命令中都相当一致。

【讨论】:

  • 所以你基本上是说你不能?除非你在随机输出上做疯狂的正则表达式,或者如果你使用另一种语言来为你提供模块?废话,如果这是真的,我会将您的答案标记为正确,然后让自己对 CLI 感到注定要失败:P。谢谢。
猜你喜欢
  • 2017-07-14
  • 2020-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-21
  • 2018-03-16
相关资源
最近更新 更多