redknight schrieb:
Dann solltest Du mal die Datei herzeigen. Da meine zeile funktioniert,
Nein, tut sie nicht:
$ for i in {1..10}; do echo $i &;done
-bash: syntax error near unexpected token `;'
Steht auch so in 7403088.
kann es ja nur an "cat namen" liegen...
Der Ampersand ersetzt das Semikolon. Ohne Semikolon geht es:
$ for i in {1..10}; do echo $i &done
[1] 9740
1
[2] 7380
2
[3] 9176
3
4
[4] 7852
5
[5] 6332
6
[6] 8340
7
[7] 7880
[8] 7560
8
[9] 8936
9
[10] 6800
10
[1] Done echo $i
[2] Done echo $i
[3] Done echo $i
[4] Done echo $i
[5] Done echo $i
[6] Done echo $i
[7] Done echo $i
[8] Done echo $i
[9] Done echo $i
Hier ist allerdings unschön, dass das Skript terminiert, bevor alle Kindprozesse beendet worden sind. Besser, man wartet, z.B. so
$ c=0; for i in {1..5}; do sleep $i & c=$((c + 1)); done; while [ $c -gt 0 ]; do wait; c=$((c - 1)); done
[1] 8716
[2] 7272
[3] 5064
[4] 9740
[5] 6356
[1] Done sleep $i
[2] Done sleep $i
[3] Done sleep $i
[4]- Done sleep $i
[5]+ Done sleep $i
(Ich habe die Form gewählt, die auch in der sh
funktioniert.)
Lysander schrieb:
Wobei Du Dir unabhängig von der technischen Machbarkeit darüber klar sein musst, dass eine Parallelisierung nicht automatisch einen Zeitgewinn bedeutet. Es kann sogar sein, dass etwas dadurch länger dauert!
Genau! Das hängt davon ab, was die einzelnen Prozesse machen und wie viele Resourcen an CPU und IO-Bandbreite zur Verfügung stehen.
Ciao
robert