Ich laufe etwa 100 Sub-Shells und versuche, alle Ergebnisse von ihnen zu echo. Code:Wie bekomme ich Ergebnisse von parallelen Sub-Shells in Bash?
#!/usr/bin/env bash
function some_function(){} #spider
# ... ...
for i in {1..100}
do
array[$i]=some_function $i &
done
echo ${array[@]}
Ich weiß, dass diese Bewertungen in Unterschalen passieren, so nichts werde ich bekommen.
Aber ich kann
echo $(some_function $i) &
in der Schleife nicht stattdessen verwenden, wegen Rennen, die nicht lesbar alles gemacht.
Keine Ahnung, warum
(set -a; array[$i]=some_function $i; set +a)&
oder
if true; then set -a; array[$i]=some_function $i; set +a; fi &
auch nicht funktioniert.
Ich habe mein Bestes getan, um zu vermeiden, irgendwelche Temp-Datei oder Fifo oder Fd woanders zu verwenden.
Was ist der richtige Weg, es zu tun?
Edit: Ich frage mich, ob GNU-Parallel funktioniert, obwohl es nicht in msys2 ist.
GNU 'parallel' nur ein weiterer Weg ist Hintergrundprozess zu beginnen; it * selbst * ist ein weiterer externer Prozess und kann daher keine Shell-Variablen in der aufrufenden Shell setzen. – chepner