bash - 在 bash 脚本中,是否可以将由后台进程计算的值分配给变量?

标签 bash file io

<分区>

如果我有这样的脚本:

#!/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 秒(虽然计算机很忙)! 有什么建议吗?

最佳答案

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

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

关于bash - 在 bash 脚本中,是否可以将由后台进程计算的值分配给变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18294736/

相关文章:

io - 驱动程序和用户应用程序之间的主要区别是什么?

linux - VboxManage list vms Linux Shell 脚本总是输出错误的结果

linux - tar 中的 -C 选项更改父目录权限

c - 将有关信号的数据保存在文件中?

c - 逐行填充数组(一维数组)

Java链表与对象 - 空指针异常

linux - 如何在不使用 tmp 目录的情况下重新打包 zip 文件?

bash - 在 Telegram 按钮 bash 中发送自定义 URL

在 C++11 中调用 C 函数时,我可以将 std::vector 作为 FILE* 潜入吗?

file - JSF 1.2 JSP 2.0 带有属性的简单自定义标记文件