Bash 스크립트에서는 백그라운드 프로세스가 완료될 때까지 사용자가 몇 초 정도 기다려야 하는 경우가 있습니다.
나는 보통 다음과 같은 예를 사용합니다.
sleep 10
사용자가 얼마나 기다려야 하는지 알 수 있도록 스크립트에 진행률 표시줄을 어떻게 추가합니까?
명령을 설치했지만 bar
설명서를 읽을 수 없습니다.
답변1
while true;do echo -n .;sleep 1;done &
sleep 10 # or do something else here
kill $!; trap 'kill $!' SIGTERM
echo done
그러면 무한 while 루프가 시작되어 매초 스피너를 에코하고 백그라운드에서 실행됩니다.
command 대신 원하는 명령을 실행하십시오 sleep 10
.
명령 실행이 완료되면 백그라운드에서 실행 중인 마지막 작업이 종료됩니다(이것은 무한 while 루프입니다).
원천:https://stackoverflow.com/a/16348366/1069083
대신 다음 스피너와 같은 다양한 while 루프를 사용할 수 있습니다.
while :;do for s in / - \\ \|; do printf "\r$s";sleep 1;done;done
답변2
시작하기에 충분합니다.
#!/bin/bash
for i in {001..100}; do
sleep 1
printf "\r $i"
done
\r
개행 없이 줄을 처음으로 되돌리려면 이스케이프 시퀀스를 사용하세요 . 이를 통해 수백 줄의 출력 없이 출력을 업데이트할 수 있습니다. 이 베이스를 이용하면 =>25% ==>50% ===>75%
단순히 숫자를 출력하는 것이 아니라 천천히 화살표를 출력하는 방법을 찾을 수 있습니다 . if-then 논리를 사용하여 숫자의 크기에 따라 =의 특정 숫자를 인쇄하는 매우 기본적인 방법으로 이 작업을 수행할 수 있습니다.
답변3
이것은 용도입니다커서 이동그러면 카운트다운을 표시하는 줄이 다시 작성됩니다.
c=5 # seconds to wait
REWRITE="\e[25D\e[1A\e[K"
echo "Starting..."
while [ $c -gt 0 ]; do
c=$((c-1))
sleep 1
echo -e "${REWRITE}$c"
done
echo -e "${REWRITE}Done."
답변4
파일 복사 프로세스의 진행 상황을 보려면 간단히 다음을 사용할 수 있습니다.
pv source_file > destination_file
또는
rsync --progress source_file destination_file
cp
명령 보다는