web-dev-qa-db-fra.com

Utiliser & (esperluette) en boucle bash sur une seule ligne

J'ai utilisé cette commande avec succès, ce qui modifie une variable dans un fichier de configuration puis exécute un script Python dans une boucle:

for((i=114;i<=255;i+=1)); do echo $i > numbers.txt;python DoMyScript.py; done

Comme chacun DoMyScript.py lui-même prend environ 30 secondes pour s'exécuter avant de se terminer, je voudrais les reléguer à l'arrière-plan pendant que le suivant peut être généré.

J'ai essayé ce que je connais, en ajoutant une esperluette comme ci-dessous:

for((i=114;i<=255;i+=1)); do echo $i > numbers.txt;python DoMyScript.py &; done

Cependant, cela se traduit par l'erreur ci-dessous:

-bash: erreur de syntaxe près du jeton inattendu `; '

61
ljs.dev

Jeter le ; après &. Il s'agit d'une exigence syntaxique

for((i=114;i<=255;i+=1)); do echo $i > numbers.txt;python DoMyScript.py & done
91
iruvar

Étant donné le commentaire de Stéphane sur réponse de 1_CR , vous voulez probablement:

for i in {114..255}; do { echo $i > numbers.txt && python DoMyScript.py; } & done
14
glenn jackman

Perdre le ;:

for((i=114;i<=255;i+=1)); do echo $i > numbers.txt;python DoMyScript.py & done
11
Martin von Wittich