我想同时运行函数f1
和f2
,然后只在两者都完成时才执行动作。
看起来,如果函数像脚本一样后台运行,那么脚本不会看到值更改,直到循环不会终止并且最后一行不会执行。bash变量作用域与函数fork问题(&)
- 这应该如何实施?
编辑 - 附加功能所需
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."
事情是在单独的进程;它们的变化不会影响父进程。 –
你正在寻找多线程和bash不支持。有一些Korn shell(ksh)支持多线程的讨论(http://kornshell.com/doc/faq.html Q7),但我不认为它发生了。除此之外,我不知道任何多线程的shell,你需要类似C,C++或Java的东西。 – cdarke