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 진행률 표시줄"입니다.