繁体   English   中英

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

[英]how can I have two while loops run at the same time? bash

好吧,我只是想知道我如何同时运行两个while循环。 我听说过while循环上的done&,但是当我尝试使用它时,一切都以失败告终。 我也听说过使用类似fork循环的方式,但我仍然不明白。

如果有人有想法,可以给我一个示例脚本,以便我理解。 我也不拒绝done&和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 )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM