我正在使用 BASH,我正在调用几个更新几个变量的函数。这些功能需要很长时间才能完成,所以我想在后台运行所有功能,以便它们可以同时运行。 这是我要问的一个基本示例。
#/bin/bash
func1()
{
var1="one"
}
func2()
{
var2="two"
}
func3()
{
var3="three"
}
echo "Right now this is what i am doing"
func1 &
func2 &
func3 &
wait
echo "The variables are $var1 $var2 $var3"
echo "But the variables are empty.
echo "Hence, I am assuming that they are not accessible outside of the function"
我觉得我错过了一些非常愚蠢的东西。当然,如果我不在后台运行函数,它们会显示正确的变量。 提前谢谢你。
最佳答案
如果你真的需要这样做,一个黑客可以让你的函数打印出 bash 代码,然后你可以以某种方式捕获并评估它。
很确定最简单的方法就是让您的函数将代码输出到一个临时文件,然后在最后获取该文件。因此,您可以将函数更改为:
func1(){
echo "var1=one"
}
然后在最后做类似的事情:
TEMPFILE=`mktemp`
func1 >> $TEMPFILE &
func2 >> $TEMPFILE &
func3 >> $TEMPFILE &
wait
source $TEMPFILE
rm $TEMPFILE
echo "$var1 $var2 $var3"
如果函数本身正在打印输出,那么您可能必须执行一些操作,例如导出保存临时文件名称的变量,然后在函数中进行重定向,即:
export TEMPFILE=`mktemp`
func1(){
echo "var1=one" >> $TEMPFILE
}
不要忘记删除临时文件...
注意:可能有更好的方法。
关于multithreading - bash中的简单后台进程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6537231/