Syntaxfehler in der for-Schleife beim Umleiten der Ausgabe in eine Datei im Hintergrund


7

Ich versuche, einige Protokolldateien mithilfe eines Skripts zu analysieren, und da alle unabhängig voneinander analysiert werden können, versuche ich, sie im Hintergrund auszuführen. Ich verwende den folgenden Befehl, erhalte jedoch den folgenden Syntaxfehler:

for k in {2..3}; do for i in {1..3}; do for j in {1..3}; do ./run_parser.sh ${k} ${i} ${j} > parse_${k}${i}${j}.log 2>&1 &; done; done; done
-bash: syntax error near unexpected token `;'

Obwohl, wenn ich das run_parser.shSkript einzeln ohne die Schleife ausführe , läuft es gut. Etwas wie:

./run_parser.sh 2 1 2 > parse_212.log 2>&1 &

funktioniert einwandfrei.

Außerdem habe ich zuvor versucht:

for k in {2..3}; do for i in {1..3}; do for j in {1..3}; do ./run_parser.sh ${k} ${i} ${j} & > parse_${k}${i}${j}.log ; done; done; done

Das funktionierte auch, aber die Ausgabeumleitung funktionierte nicht und alles wurde auf dem Bildschirm gedruckt.

Antworten:


6

Sie sollten den Hintergrundbefehl ()wie folgt einfügen :

for k in {2..3}; do for i in {1..3}; do for j in {1..3}; do (./run_parser.sh ${k} ${i} ${j} > parse_${k}${i}${j}.log 2>&1 &); done; done; done

Dies erzeugt eine zusätzliche, aber ziemlich sinnlose Unterschale für jede Ausführung der inneren Schleife.
David Foerster

6

Sie brauchen kein ;nach a &, das &selbst fungiert als Befehlstrennzeichen. Siehe den Abschnitt "Liste der Befehle" im Bash-Referenzhandbuch .

Dadurch werden drei gleichzeitig ausgeführt ping:

ping -c 3 askubuntu.com & ping -c 3 askubuntu.com & ping -c 3 askubuntu.com &

Das funktioniert auch.
Wajahat

3
Nein, das ist die andere (das Hinzufügen von Klammern, um ein Semikolon zu kompensieren, das überhaupt nicht vorhanden sein sollte), das "auch funktioniert". :)
Xenoid
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.