Mogekoff
@Mogekoff
студент кмбшник

Как запустить еще один dialog, поверх запущенного dialog, у которого отсутствует --add-widget токен?

Продолжаю писать свой скрипт на автоматическую установку одного дистрибутива. Решил заменить последовательность команд с приглашением на ввод на диалоговые окна с помощью программы dialog.

Поскольку это скрипт установки, то я подумал, что нужен красивый прогресс бар. Решил использовать --gauge.
Я решил, что всё время установки прогресс бар должен находиться на фоне, пока тем временем будут появляться диалоговые окна вроде yes/no или приглашения на ввод юзернейма, например.
Так вот, оформил я это так:
spoiler
while [[ $i < 101 ]]
do
    #some code
    echo $((++i))
    dialog --yesno text 50 50
    #some code
    echo $((++i))
done | dialog --title 'Test script' --gauge 'Running...' 6 60 0

1. То есть после каждой выполненной команды к прогресс бару должен добавляться условно 1%.
2. При этом в фоне должны спокойно выполняться команды установки, не выводя ничего на консоль.
3. Так же должны были выводиться диалоговые окна, но при таком вызове, как я указал выше, прогресс бар просто замирает, а при клике на Enter, он снова становится активным (очевидно, новое окно невидимо, но интерактивно).
Пробовал различные связки с --no-kill, --keep-window, --clear. Вроде как ничего не помогло.
При связке диалоговых окон в цепь с помощью --and-widget всё работает нормально, но тогда возникают две проблемы:
1) Окна запускаются друг за другом. То есть следующее в цепи окно запустится после завершения прошлого (прогресс бара в моем случае).
2) Не понятно как тогда прибавлять процент.

Возможно описал немного сумбурно, но вроде понятно описал задачу. Главное решить задачу.

Спасибо заранее за помощь.
  • Вопрос задан
  • 51 просмотр
Решения вопроса 1
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
Забавная утилита, действительно можно много чего с ней сделать.
Для начала, переменная i у вас текст, и "$i < 101" работает неправильно. Декларируйте ее как число и тогда $i -lt 101
ну и примерно накидал то, что вы хотите
declare -i i
while [[ $i -lt 101 ]]
do
    sleep 1
    echo $i| dialog --keep-window --begin 1 1 --gauge 'Running...' 15 15 $i --and-widget --yesno text 50 50
    i+=1
done
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы