我怎么能有两个while循环在同一时间运行?bash



嗯,我只是想知道我怎么能像两个while循环在同一时间运行。我听说过他。在while循环中,但当我试图使用它时,它最终失败了。我也听说过像fork循环这样的用法,但我还是不明白。

如果有人有想法,你能给我一个小的例子脚本,让我能理解。我也不是拒绝做。而fork循环只是不知道如何正确使用它们。

#!/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看到它)。

最新更新