“progress-bar.sh”를 사용하여 원격 서버에서 발생하는 작업 진행 상황을 표시하는 방법

“progress-bar.sh”를 사용하여 원격 서버에서 발생하는 작업 진행 상황을 표시하는 방법

SSH를 통해 원격 서버의 작업에 진행률 표시줄을 통합해야 합니다.

내 상황에는 SSH를 통해 소수의 원격 서버에서 프로세스를 트리거하는 여러 루프가 있습니다. 이러한 프로세스는 트리거되고 certainFunction10~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

그러나 프로세스가 어떻게 진행되고 있는지 측정할 수 없고 실제 진행 상황을 현실적으로 예측할 수 없는 경우 진행률 표시줄을 제공하는 것은 쓸모가 없습니다. 즐겨 사용하는 창 관리자의 시계 위젯은 관련 정보를 최대한 제공합니다.

관련 정보