如何同时运行两个 while 循环?猛击

Lif*_*ake 1 bash shell

好吧,我只是想知道如何同时运行两个 while 循环。我听说过在 while 循环中使用 done& ,但是当我尝试使用它时,它最终失败了。我也听说过像 fork 循环一样使用,但我仍然不明白。

如果有人有想法,您可以给我一个小示例脚本,以便我理解。我也不是拒绝 done& 和 fork 循环只是不知道如何正确使用它们。

P.P*_*.P. 5

#!/bin/bash

while [ number == 1 ]; do sleep 1 echo "$time" done &

while [ number == 1 ]; do sleep 1 time=$(echo "$time+1" | bc) done 
Run Code Online (Sandbox Code Playgroud)

当您运行上述脚本时,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
Run Code Online (Sandbox Code Playgroud)

最后,不要忘记删除管道。只需这样做:(rm mypipe您可以在当前目录中看到它:)ls -l mypipe