Опции меню диалога Bash в виде массива - PullRequest
0 голосов
/ 21 октября 2018

Я получаю http-ответ от Hetzner API, который предоставляет информацию обо всех томах.Я хочу построить меню с диалогом, где вы можете выбрать из всех существующих объемов.Таким образом, я получаю ответ 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"

но в диалоговом окне меню отображается , как на этом изображении

Я уже пытался поставить скобки относительно jq (jq '[.volumes[].name'), но он тоже отображается совершенно неправильно как в этом примере

Для создания интерфейса я использую следующий код:

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

Итак, как я могу сгенерировать правильный интерфейс меню в диалоге с заданными данными?

1 Ответ

0 голосов
/ 22 октября 2018

Возможно объединить информацию в одну строку.Это приводит к следующему коду:

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)
...