如果我有这样的脚本:
#!/bin/bash
echo `script2.sh` > temp.txt &
(wait for long enough time)
a=`cat temp.txt`
echo $a
一个值将由script2.sh成功更改。但是,如果我这样做:
#!/bin/bash
a=`script2.sh` &
(wait for long enough time)
echo $a
script2.sh不会更改a的值。我之所以这样做是因为:(1)我不希望主进程被script2.sh阻塞(在等待期间,我可以做其他事情)(2)我的主程序会做很多事情这样的东西,所以做很多文件IO会给我带来很大的开销,最好直接将值分配给内存中的变量。 我发现bash脚本中的文件IO非常慢。在我的程序中,执行400个这样的IO将花费大约10秒钟(当计算机正忙时)! 有什么建议吗?
答案 0 :(得分:2)
您无法将shell变量分配给尚不存在的值,因此您的方法根本无法实现。除了临时文件之外,我没有看到一个真实的选项,但你可以加快这个选项的速度。我很确定文件I / O不是很慢,而是你要创建一个子shell到echo
脚本输出到文件,以及cat
进程来读取文件。进程创建速度很慢,因此如果您希望速度最小化则很重要。您可以通过将shell的输出直接重定向到文件来避免创建echo
子进程,并将cat
进程替换为直接在shell中读取文件的bash的$(<file)
惯用法。这就是我想出的:
#!/bin/bash
script2.sh >temp.txt &
# (wait for long enough time)
a=$(<temp.txt)
echo "$a"