特定のプロセスが完了するまで進捗インジケータを表示できましたが、実行中に同じ進捗インジケータを表示するコードを取得できませんでした。ループ。私は、スクリプト内でsleepコマンドを使用して進捗状況を表示することができBashスクリプト:whileループが完了するまで進捗インジケータを表示
/bin/ping -c 10 $ipaddress > /pinglog & PID=$!
printf "["
while kill -0 $PID 2> /dev/null; do
printf "."
sleep 1
done
printf "] "
:
sleep 30 & PID=$!
printf "["
while kill -0 $PID 2> /dev/null; do
printf "."
sleep 1
done
printf "] "
これらの例のいずれもが仕事と私の出力がどのように見える私は、スクリプト内でpingを実行する場合たとえば、私はこれを行いますこれは:
[.........................}
コマンドが完了するまでドットが1秒間続きますが、これは私が望むものです。しかし、私は今、whileループを使って同じ出力を得ようとしています。私は後の結果を得ることができません。ここまで私がこれまで持っていたことがあります。
while [[ ! $(/bin/grep -wo -m1 $VAR1 /logfile) ]] & PID=$!
printf "["
while kill -0 $PID 2> /dev/null; do
printf "."
sleep 1
done
printf "] "
do
sleep 5
done
echo $VAR1 was found
これは、文字列が見つかったとき、それは停止しませんが実行され、出力は次のようになります。
[.] [.] [.] [.] [.] and on and on...
私はループを行う一方で、実際の移動しようとした、睡眠5と第1の上に行っていますprintfステートメントを実行しても結果は悪く、進捗インジケーター出力も表示されません。最初の2つの例が私に与えているのと同じ進捗インジケータの出力を得るために、これを修正できますか?パターンが見つかると停止しますか?
whileループを使用して特定のログファイルにパターンが存在するかどうかをテストします。パターンが表示されるのを待つ間に、最初の2つの例で示したように、進行中のインジケータを表示し、別のwhileループを使用します。ネストされたループが話すように。パターンが現れると、printf [......]は停止するはずです。 – user53029
あなたが言ったことをちょうど読み返してください。しかし、printfは、最初のwhileループのPIDが終了したとき(パターンが見つかったとき)に、失敗するか、完了するか、何かをする必要があります。しかし、それはしません。少なくともこのコードではありません。 – user53029
@ user53029: 'printf'は失敗しません。それはなぜでしょうか? – rici