【问题标题】:Bash dialog menu options as arrayBash 对话框菜单选项作为数组
【发布时间】:2018-10-21 16:13:45
【问题描述】:

我收到 Hetzner API 的 http 响应,它提供有关所有卷的信息。我想构建一个带有对话框的菜单,您可以在其中从所有现有卷中进行选择。 这样我就得到了 API 的答案:

ALL_VOLUMES_HTTP=$(curl --silent --write-out "HTTPSTATUS:%{http_code}" -H "Authorization: Bearer $1" https://api.hetzner.cloud/v1/volumes)

jq就是这样过滤的

ALL_VOLUME_NAMES=$(jq '.volumes[].name' <<< "$ALL_VOLUMES_HTTP")

ALL_VOLUME_NAMES 的输出格式如下

"volumeName1"
"volumeName2"

但在菜单对话框中显示like in this image

我已经尝试为 jq (jq '[.volumes[].name') 加上括号,但它也显示完全错误 like in this example

为了生成界面,我使用以下代码:

SELECTED_VOLUME=$(dialog --title "Volume mount" --menu "Select:" 0 0 0 $ALL_VOLUME_NAMES 3>&1 1>&2 2>&3)

那么如何在给定数据的对话框中生成正确的菜单界面?

【问题讨论】:

  • 不清楚如何从 jq 输出生成 GUI 菜单。请澄清,否则您的 Q 有被关闭的危险。 Q中提到的过滤器('[.volumes[].name')在语法上也是无效的,所以你在写Q时一定是打错了。

标签: bash shell dialog stdout jq


【解决方案1】:

可以将信息连接到一个字符串。这导致以下代码:

ALL_VOLUMES_HTTP=$(curl --silent --write-out "HTTPSTATUS:%{http_code}" -H "Authorization: Bearer $1" https://api.hetzner.cloud/v1/volumes)
ALL_VOLUME_NAMES=$(echo $ALL_VOLUMES_HTTP | jq -r '.volumes[].name')

VALUES=""
for i in $ALL_VOLUME_NAMES; do
        VALUES="$VALUES $(jq -r '.volumes[]|select(.name=="'$i'")|.id' <<< "$ALL_VOLUMES_HTTP") $i"
done

SELECTED_VOLUME=$(dialog --title "Volume mount" --menu "Select: " 0 0 0 $VALUES 3>&1 1>&2 2>&3)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2011-09-30
    • 1970-01-01
    相关资源
    最近更新 更多