加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – Bash:如何在循环中检索背景中的变量值

发布时间:2020-12-14 01:29:53 所属栏目:Linux 来源:网络整理
导读:作为示例,请考虑以下bash脚本.有两个循环,第一个在后台执行,第二个循环打印myvar值: #!/bin/bashmyvar=AAAwhile true;do sleep 3 myvar=BBB sleep 3 myvar=CCCdone while true;do echo "${myvar}" sleep 1done 我实际获得的输出: AAAAAAAAA... 我希望获得
作为示例,请考虑以下bash脚本.有两个循环,第一个在后台执行,第二个循环打印myvar值:

#!/bin/bash

myvar=AAA

while true;
do
    sleep 3
    myvar=BBB
    sleep 3
    myvar=CCC
done &

while true;
do
    echo "${myvar}"
    sleep 1
done

我实际获得的输出:

AAA
AAA
AAA
...

我希望获得的输出:

AAA
BBB
CCC
BBB
CCC
...

解决方法

这是由于&为第一个while循环创建一个新的子shell.

我很确定你需要使用某种IPC来解决这个问题.使用管道或命名管道来实现生产者/消费者设置是合理的.

一个粗略的例子:

#!/bin/bash

myvar=AAA

while true;
do
    sleep 3
    myvar_piped=BBB
    echo $myvar_piped # this goes to the pipe.
    sleep 1
done | # this connects the two loops.

while true;
do
    # if we consumed something (timeout=1) print it,else print our own variable.
    if read -t 1 myvar_piped #
    then
        echo "${myvar_piped}"
    else
        echo "${myvar}"
    fi  
done

输出:

AAA
AAA
AAA
BBB
AAA
AAA
AAA
AAA
BBB

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读