【发布时间】:2016-08-17 00:39:53
【问题描述】:
我正在运行大约 100 个子 shell,并尝试回显它们的所有结果。代码:
#!/usr/bin/env bash
function some_function(){} #spider
# ... ...
for i in {1..100}
do
array[$i]=some_function $i &
done
echo ${array[@]}
我知道这些评估发生在子 shell 中,所以我什么也得不到。
但我不能使用
echo $(some_function $i) &
而是在循环中,因为 racing,这使得所有内容都无法阅读。
不知道为什么
(set -a; array[$i]=some_function $i; set +a)&
或
if true; then set -a; array[$i]=some_function $i; set +a; fi &
也没有用。
我已尽力避免在其他地方使用任何临时文件或 fifo 或 fd。
正确的做法是什么?
编辑:我想知道 GNU-Parallel 是否可以工作,尽管它不在 msys2 中。
【问题讨论】:
-
GNU
parallel只是另一种启动后台进程的方式;它本身是另一个外部进程,所以不能在调用shell中设置shell变量。
标签: linux multithreading bash shell parallel-processing