1

さて、私はどうすれば2つのwhileループを同時に実行できるのか疑問に思っていました。私はwhileループでdone&のことを聞いたことがありますが、それを使おうとすると結局失敗しました。まだわからないフォークループのような使い方も聞いたことがあります。

誰かアイデアがあれば、理解できるようにスクリプトの例を教えてください。また、done&を拒否していません。フォークループは、それらを適切に使用する方法がわかりません。

4

1 に答える 1

5
#!/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)。

于 2013-01-12T21:21:59.033 に答える