この答えを見ています。ここプロセスが実行されるのを待っている間(私の場合は)進行状況バーを実装したいと思います。
次のコードスニペットを使用して、大規模ファイルシステムの複数のコピーを並列に実行します。
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 "$!"