Показать диалоговое окно индикатора при сохранении кода выхода функции

Вопрос или проблема

Эта функция отправляет API-запросы.

api_req() {
    # запрос 1
    echo 33
    # запрос 2
    echo 66
    # запрос 3
    echo 100
}

Это вернет 1, если любой из запросов потерпит неудачу.

Теперь я хочу передать это в диалог gauge.
Вот так,

if ! api_req | dialog --gauge "Отправка запросов" -1 -1 0; then
    echo "API-запросы потерпели неудачу!!"
fi

Но он не может обнаружить сбой.

Я также пробовал api_req > >(dialog ...), но в этом случае диалог не отображается.

Как мне это заставить работать?

tmpfile=$(mktemp)
if api_req > "$tmpfile"
then
        dialog --gauge "Отправка запросов" -1 -1 0 < "$tmpfile"
else
        echo "API-запросы потерпели неудачу!!"
fi

Ответ или решение

Показ диалогового индикатора с сохранением кода выхода функции

В данной задаче необходимо реализовать функциональность, в которой будет отображаться диалоговый индикатор при выполнении API-запросов, при этом требуется сохранить корректный код выхода функции. Рассмотрим решение этой задачи более детально.

1. Описание функции api_req

Функция api_req выполняет несколько запросов и возвращает результат выполнения. Ваша версия функции выглядит следующим образом:

api_req() {
    # req 1
    echo 33
    # req 2
    echo 66
    # req 3
    echo 100
}

Предполагается, что эта функция вернет код выхода 1, если любой из запросов завершился неудачно, что вы уже упомянули.

2. Использование диалогового индикатора

Для интеграции с dialog, используется следующая конструкция:

if ! api_req | dialog --gauge "Sending requests" -1 -1 0; then
    echo "api requests failed!!"
fi

Однако, в данной конструкции не удается отобразить возможность обработки кода выхода, что приводит к неэффективному отображению статуса выполнения.

3. Решение с использованием временного файла

Чтобы решить проблему, можно использовать временный файл, который позволит отобразить индикатор и сохранить код выхода функции. Пример реализации данного подхода:

tmpfile=$(mktemp)
if api_req > "$tmpfile"; then
    dialog --gauge "Отправка запросов" -1 -1 0 < "$tmpfile"
else
    echo "API запросы завершились неудачей!!"
fi

Объяснение подхода

  1. Создание временного файла: tmpfile=$(mktemp) создает временный файл, в который будут записываться результаты выполнения функции api_req.

  2. Запись результата: if api_req > "$tmpfile" выполняет функцию и записывает ее вывод в временный файл. Если выполнение функции успешно (код выхода 0), управление передается в блок then.

  3. Отображение индикатора: dialog --gauge "Отправка запросов" -1 -1 0 < "$tmpfile" инициирует диалоговый индикатор, отображая данные из временного файла.

  4. Обработка ошибок: Если функция завершилась с ошибкой, выполнится блок else, и на экран будет выведено сообщение о неудаче.

Заключение

Используя временный файл для сохранения результатов работы функции и отдельную проверку кода выхода, можно эффективно комбинировать вывод диалогового индикатора с обработкой ошибок. Этот подход позволяет сохранить все инструкции и индикацию выполнения в одном коде, обеспечивая интеллектуальную обработку результатов API-запросов.

Оцените материал
Добавить комментарий

Капча загружается...