이 답변을 보고 있어요여기프로세스가 실행되기를 기다리는 동안(내 경우에는) 진행률 표시줄을 구현하고 싶습니다.
다음 코드 조각을 사용하여 대규모 파일 시스템의 여러 복사본을 병렬로 실행합니다.
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 "$!"