我如何同时运行两个while循环?庆典

时间:2013-01-12 19:57:51

标签: bash shell

我只是想知道如何在同一时间运行两个while循环。我听说过已经完成了在一个while循环和所有,但当我试图使用它最终失败。我也听说像fork循环一样使用,我仍然不明白。

如果有人有想法,你可以给我一个小例子脚本,这样我就能理解。 我也不是拒绝做完&和fork循环只是不知道如何正确使用它们。

1 个答案:

答案 0 :(得分:4)

#!/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创建named pipe,并将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)。