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

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

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

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

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

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

Вот код для progress-bar.sh:

progress-bar() {
  local duration=${1}


    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 без установки дополнительных пакетов.

решение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

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

Связанный контент