Bash对话框菜单选项作为数组

时间:2018-10-21 16:13:46

标签: bash shell dialog stdout jq

我收到了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)

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

1 个答案:

答案 0 :(得分:0)

可以将信息合并为一个字符串。结果是这样的代码:

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)