2017-10-12 12 views
4

Dans le script shell ci-dessous, je voudrais exécuter 2 commandes parallèles en arrière-plan pour accélérer le processus, attendre qu'elles se terminent et continuer à exécuter d'autres commandes par la suite. Comme j'utilise le même nom de variable (DATASERVERNAME) dans les deux boucles, ces variables vont-elles interférer entre elles en arrière-plan? Dois-je utiliser des noms de variables différents, comme DATASERVERNAME_SYBASE, DATASERVERNAME_ORACLE dans chaque boucle à la place?Puis-je utiliser le même nom de variable dans bash pour plusieurs processus d'arrière-plan parallèles?

#!/bin/bash 
while read DATASERVERNAME 
do 
    some commands here 
done < sybase_data_servers.txt & 

while read DATASERVERNAME 
do 
    some commands here 
done < oracle_data_servers.txt & 

wait 

some more commands here 

Répondre

4

Votre script est sûr que vous pourriez révéler à travers une petite expérience:

#!/bin/sh -eu 
echo A > a 
echo B > b 

X=0 

while read X 
do 
    echo X=$X 
done < a & 
wait 

echo X=$X 

while read X 
do 
    echo X=$X 
done < b & 
wait 



echo X=$X 

sortie Script:

X=A 
X=0 
X=B 
X=0 

Les boucles backgrounded courent dans les différents processus ($BASHPID devrait refléter le fait que trop).