![](/img/trans.png)
[英]I have a test env with bash 4 and loops work but the same loops do not run within the production env using bash 3
[英]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.