函数fork(&)的bash变量范围问题

use*_*734 2 variables bash scope fork

我想同时运行函数f1,f2然后只有在完成后才执行操作.
似乎如果函数在脚本中是后向的,脚本f1/f2done看不到值更改,则until循环不会终止,并且不会执行最后一行.

  1. 该如何实施?

编辑 - 需要额外的功能
2.有没有办法可以读取/写入脚本中的主流程变量(不使用文件)?

谢谢你的阅读.

#!/bin/bash

f1done="false"
f2done="false"

function f1 {
    echo "f1: "
    sleep 4
    echo "f1 done."
    f1done="true"
}

function f2 {
    echo "f2: "
    sleep 2
    echo "f2 done."
    f2done="true"
}

f1 &
f2 &

until [[ "$f1done" == "true" && "$f2done" == "true" ]]; do
    echo "$f1done $f2done...";
    sleep 3;
done

echo "Both done."
Run Code Online (Sandbox Code Playgroud)

Ed *_*eal 5

f1并且f2将是单独的过程,因此具有与主过程分开的地址空间.因此你的循环将是无限的.

你需要wait改用.

更改

until [[ "$f1done" == "true" && "$f2done" == "true" ]]; do
    echo "$f1done $f2done...";
     sleep 3;
done
Run Code Online (Sandbox Code Playgroud)

wait;
wait;
Run Code Online (Sandbox Code Playgroud)