Как использовать "progress-bar.sh" для отображения хода выполнения операций, выполняемых на удаленных серверах

мне нужно интегрировать индикатор выполнения для операций на удаленном сервере по SSH.

в моей ситуации есть несколько петель, которые запускают процессы на нескольких удаленных серверах по SSH. Эти процессы запускаются с помощью certainFunction и занять от 10 до 60 минут (в зависимости от многих непредсказуемых вещей). Поскольку процессы управляются с главного сервера, я хотел бы отобразить некоторый индикатор выполнения, основанный на времени, например, процент или бар (не точки или счетчик), который был бы указывает на общий прогресс.

это возможно?

В поисках какого-то экстравагантного решения я нашел Эдуарда Лопеса progress-bar.sh project подходит для моих потребностей.

здесь код progress-bar.sh:

progress-bar() {
  local duration=


    already_done() { for ((done=0; done<$elapsed; done++)); do printf "▇"; done }
    remaining() { for ((remain=$elapsed; remain<$duration; remain++)); do printf " "; done }
    percentage() { printf "| %s%%" $(( (($elapsed)*100)/($duration)*100/100 )); }
    clean_line() { printf "r"; }

  for (( elapsed=1; elapsed<=$duration; elapsed++ )); do
      already_done; remaining; percentage
      sleep 1
      clean_line
  done
  clean_line
}

можно его использовать для моей ситуации? Я ищу чистое решение Bash без установки дополнительных пакетов.

7
задан JakeGould
17.12.2022 9:32 Количество просмотров материала 3252
Распечатать страницу

1 ответ

написать индикатор легко; это не ваша проблема. Вы можете использовать

declare -i progress
progress=1
declare -i width
width=$(tput cols)-10
declare -i pbarlength


prt_bar(){
    pbarlength=$((width*progress/100))
    echo -en "\r"
    for i in `seq $pbarlength` ; do
        echo -n '='
    done
    echo -en " $progress   "

}

или что-то в этом роде

основная проблема заключается в том, чтобы определить, что ваш прогресс. Если вы попытаетесь сделать это раз, вы, несомненно, получите ложное ощущение прогресса, потому что процесс (цитирую): от 10 до 60 минут (в зависимости от многих непредсказуемых вещей).

если он как раз основан на времени, то вы смогли использовать:

while [ $progress -lt 100 ] ; do
    progress=$((progress+1))
    prt_bar
    sleep 10
done
echo 
echo done

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

0
отвечен Ljm Dullaart 2022-12-18 17:20

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх