さて、私はどうすれば2つのwhileループを同時に実行できるのか疑問に思っていました。私はwhileループでdone&のことを聞いたことがありますが、それを使おうとすると結局失敗しました。まだわからないフォークループのような使い方も聞いたことがあります。
誰かアイデアがあれば、理解できるようにスクリプトの例を教えてください。また、done&を拒否していません。フォークループは、それらを適切に使用する方法がわかりません。
#!/bin/bash
while [ number == 1 ]; do sleep 1 echo "$time" done &
while [ number == 1 ]; do sleep 1 time=$(echo "$time+1" | bc) done
上記のスクリプトを実行すると、while ループは個別のプロセスとして実行され、変数time
を独自のローカル変数として持つため、変数を「見る」ことができません。プロセス間でデータを送信するには、IPC メカニズムを使用する必要があります。
を使用して名前付きパイプを作成し、あるプロセスから別のプロセスに値mkfifo
を送信できます。time
以下は、あなたがやろうとしていることの簡単な例です:
#!/bin/bash
mkfifo mypipe #Creates a named pipe
while read line<mypipe;
do
sleep 1
echo "$line"
done &
while : ;
do
sleep 1
((time=time+1))
echo $time > mypipe
done
最後に、パイプを削除することを忘れないでください。単純に実行します: rm mypipe
(現在のディレクトリで: を使用して表示できますls -l mypipe
)。