Linux + bash에서 간단한 진행률 표시줄을 만드는 방법

Linux + bash에서 간단한 진행률 표시줄을 만드는 방법

Bash 스크립트에 "."을 표시하는 진행률 표시줄을 추가하고 싶습니다. 문자를 진행하며 MAX 180초 후에 프로세스가 종료됩니다.

Bash 스크립트에서는 컬 명령을 사용하므로 컬은 일정 시간 후에 결과를 제공하지만 180초를 넘지 않습니다.

비슷한 것

|.                                           after 2 sec
|...........                                 after 60 sec
|...................                         after 100 sec
|..........................                  after 150 sec
|................................|           after 180 sec 

최종 예

|................................|       after 180 sec 

또는

|....|                                   after 30 sec 

답변1

일반 Bash에서 이 작업을 수행하는 것은 매우 간단합니다.

#!/bin/bash
# progress bar function
prog() {
    local w=80 p=$1;  shift
    # create a string of spaces, then change them to dots
    printf -v dots "%*s" "$(( $p*$w/100 ))" ""; dots=${dots// /.};
    # print those dots on a fixed-width space plus the percentage etc. 
    printf "\r\e[K|%-*s| %3d %% %s" "$w" "$dots" "$p" "$*"; 
}
# test loop
for x in {1..100} ; do
    prog "$x" still working...
    sleep .1   # do some work here
done ; echo

첫 번째 매개변수 prog는 백분율이며, 다른 매개변수는 진행률 표시줄 뒤에 인쇄됩니다. w함수의 변수는 막대의 너비를 제어합니다. 완료되면 개행 문자를 인쇄합니다. 이 함수는 개행 문자를 인쇄하지 않습니다.


또 다른 가능성은 이 도구를 사용하는 것입니다 pv. 그 목적은 파이프라인의 처리량을 측정하는 것이지만 이를 위해 하나를 만들 수 있습니다.

for x in {1..100} ; do
    sleep .1    # do some work here
    printf .
done | pv -pt -i0.2 -s100 -w 80 > /dev/null

여기에서는 -pt진행률 표시줄과 타이머가 활성화되고 -s 100총 출력 크기가 설정되며 함수 내에서 인쇄하는 모든 항목이 해당 크기에 대해 계산됩니다.

답변2

일반적으로 행을 덮어써서 이 작업을 수행할 수 있습니다. 터미널 \r에 쓰지 않고 줄의 시작 부분으로 돌아가는 데 사용됩니다 .\n

완료되면 \n진행 방향을 적어 두십시오.

사용 echo -ne:

  • \n인쇄 되지 않으며
  • 다음과 같은 이스케이프 시퀀스를 식별하십시오.\r.

다음은 데모입니다:

echo -ne '...                     (33%)\r'
sleep 1
echo -ne '......                  (66%)\r'
sleep 1
echo -ne '..........              (100%)\r'
echo -ne '\n'

편집: 이제 cURL에는 진행률 표시줄이 제공됩니다. --progress-bar원하는 것이 아닌가요?

답변에서 가져온https://stackoverflow.com/questions/238073/how-to-add-a-progress-bar-to-a-shell-script

Google을 사용하여 첫 번째 답변을 찾았습니다. 검색어는 "bash 진행률 표시줄"입니다.

관련 정보