我想同時運行函數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