it-swarm.com.de

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

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

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 Skript run_parser.sh einzeln nacheinander ohne die Schleife ausführe, funktioniert es einwandfrei. So 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

was auch funktionierte, aber die Ausgabeumleitung funktionierte nicht und alles wurde auf den Bildschirm gedruckt.

7
Wajahat

Sie sollten den Befehl background folgendermaßen in () 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
6
Yaron

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

Dies führt drei gleichzeitige ping aus:

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