J'essaie d'analyser certains fichiers journaux à l'aide d'un script et, comme ils peuvent tous être analysés indépendamment, j'essaie de les exécuter en arrière-plan. J'utilise la commande suivante mais j'obtiens l'erreur de syntaxe indiquée juste après:
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 `;'
Bien que, si je lance le script run_parser.sh
un par un, sans la boucle, il fonctionne correctement. Quelque chose comme:
./run_parser.sh 2 1 2 > parse_212.log 2>&1 &
fonctionne parfaitement bien.
Aussi, j'ai déjà essayé:
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
ce qui a également fonctionné, mais la redirection de sortie ne fonctionnait pas et tout était imprimé à l'écran.
Vous devriez placer la commande d'arrière-plan dans ()
comme ceci:
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
Vous n'avez pas besoin d'un ;
après un &
, le &
lui-même agissant en tant que séparateur de commande. Voir la section "Liste des commandes" dans le Manuel de référence de Bash .
Ceci exécutera trois ping
simultanés:
ping -c 3 askubuntu.com & ping -c 3 askubuntu.com & ping -c 3 askubuntu.com &