Передать вывод awk в контрольный список диалога - PullRequest
0 голосов
/ 16 апреля 2020

Я хочу отобразить список баз данных с их размерами, используя dialog checklist, но получаю некоторую путаницу. Удаление пробела между размером и словом «МБ» помогает, но я не знаю, как его сохранить и сделать нормальный вывод.

Мой код:

#!/bin/bash

db_list_command="
SELECT table_schema, ROUND(SUM(data_length + index_length) / 1024 / 1024, 1)
FROM information_schema.tables
GROUP BY table_schema;
"
db_list=$(echo $db_list_command | mysql -N)
dialog_options=$(echo "$db_list" | awk '{print $1 " \"" $2 " MB\" off"}')

dialog --checklist "Select databases" 40 60 20 $dialog_options 2>/tmp/dout.txt
db_selected=$(</tmp/dout.txt)

echo $db_selected

Вывод кода выше:

https://imgur.com/a/fbgB9Vf

Вывод без пробелов между размером и МБ, но теперь с лишними дополнительными кавычками:

https://imgur.com/a/iikAlm6

Я хотел бы получить обычный контрольный список с размером в формате, подобном 5.8 MB Как это сделать?

ps Если я выведу команду awk на терминал и затем скопирую и вставлю в диалог вручную - все нормально!

1 Ответ

1 голос
/ 17 апреля 2020

Вот один из способов сохранить пробелы:

#!/bin/bash

db_list_command="
SELECT table_schema, ROUND(SUM(data_length + index_length) / 1024 / 1024, 1)
FROM information_schema.tables
GROUP BY table_schema;
"

declare -a dialog_options
while read -r db size; do
    dialog_options+=("$db" "$size MB" off)
done < <(echo $db_list_command | mysql -N)


dialog --checklist "Select databases" 40 60 20 "$dialog_options[@]}" 2>/tmp/dout.txt
db_selected=$(</tmp/dout.txt)

echo $db_selected
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...