이 답변을 보고 있어요여기프로세스가 실행될 때까지 기다리는 동안 진행률 표시줄을 구현하고 싶습니다. 제 경우에는 여러 프로세스가 실행될 때까지 기다리는 중입니다.
다음 코드 조각을 사용하여 대규모 파일 시스템의 여러 복사본을 병렬로 실행하고 있습니다.
for svol in "${svols[@]}";
do
syslog_info "copying $svol"
${CP} -p $svol $somedir &
done
syslog_info "Parallel copy ongoing..."
wait
백그라운드 프로세스가 반환될 때까지 기다리는 동안 표시할 진행률 표시줄을 추가하려고 합니다.
이것은 내 시도입니다. 내가 어디에서 잘못되고 있는지 말하거나 작동하도록 도와줄 수 있는 사람이 있습니까?
for svol in "${svols[@]}";
do
syslog_info "copying $svol"
${CP} -p $svol $somedir &
done
syslog_info "Parallel copy ongoing..."
i=1
sp="/-\|"
echo -n ' '
until wait;
do
printf "\b${sp:i++%${#sp}:1}"
sleep 0.1
done
편집: 이 질문의 원래 코드를 테스트된 작업 솔루션으로 업데이트했습니다. 대기가 반환될 때까지 계속 실행하려고 합니다.
참고로, 상단의 원래 코드는 그대로 잘 작동하며 다음 스니펫은 독립 실행형 코드 조각으로도 작동합니다.
i=1
sp="/-\|"
echo -n ' '
for i in {1..100};
do
printf "\b${sp:i++%${#sp}:1}"
sleep 0.1
done
답변1
wait
until
모든 백그라운드 작업이 반환될 때까지 차단되므로 한 번만 실행되므로 조건 으로 사용할 수 없습니다 .
[ -n "$(jobs)" ]
대신 다음을 사용하여 실행 중인 작업이 있는지 확인할 수 있습니다.
while [ -n "$(jobs)" ]; do
printf "\b${sp:i++%${#sp}:1}"
sleep 0.1
done
답변2
GNU/Linux에서는 다음을 사용할 수 있습니다.그만큼Coreutils 진행 뷰어( progress
, 이전에는cv
):
"${CP}" -p -- "$svol" "$somedir" & progress -mp "$!"