3

如果我有这样的脚本:

#!/bin/bash
echo `script2.sh` > temp.txt &
(wait for long enough time)
a=`cat temp.txt`
echo $a

a 的值将被 script2.sh 成功更改。但是,如果我这样做:

#!/bin/bash
a=`script2.sh` &
(wait for long enough time)
echo $a

a 的值不会被 script2.sh 改变。我之所以要这样做是因为:(1)我不希望主进程被script2.sh阻塞(在等待期间,我可以做其他事情)(2)我的主程序会做很多这样的东西,所以做很多文件IO会给我带来很大的开销,最好直接将值分配给内存中的变量。我发现 bash 脚本中的文件 IO 真的很慢。在我的程序中,执行 400 次这样的 IO 大约需要 10 秒(虽然计算机很忙)!有什么建议吗?

4

1 回答 1

2

您不能将 shell 变量分配给尚不存在的值,因此您的方法根本不可能。除了临时文件之外,我没有看到任何现实的选项,但您可以加快该选项的速度。我很确定不是文件 I/O 很慢,而是您正在为echo脚本的文件输出创建一个子shell,以及一个cat读取文件的过程。进程创建很慢,因此如果您想要速度,那么将其最小化很重要。echo您可以通过将 shell 的输出直接重定向到文件来避免创建子进程,并将进程替换为直接在 shell 中读取文件cat的 bash习惯用法。$(<file)这是我想出的:

#!/bin/bash
script2.sh >temp.txt &
# (wait for long enough time)
a=$(<temp.txt)
echo "$a"
于 2013-08-18T01:32:56.490 回答