2017-10-12 7 views
4

아래 셸 스크립트에서 두 개의 명령을 백그라운드에서 병렬로 실행하여 프로세스 속도를 높이고 완료 될 때까지 기다렸다가 나중에 명령을 더 계속 실행하고 싶습니다.여러 병렬 백그라운드 프로세스에 대해 동일한 변수 이름을 bash에서 사용할 수 있습니까?

두 루프에서 동일한 변수 이름 (DATASERVERNAME)을 사용하고 있기 때문에 이러한 변수가 백그라운드에서 서로 방해가됩니까? 대신 DATASERVERNAME_SYBASE, DATASERVERNAME_ORACLE 같은 각기 다른 변수 이름을 사용해야합니까? 당신은 약간의 실험을 통해 밝혀 수 있기

#!/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 

답변

4

스크립트는 안전 :

#!/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 

스크립트 출력 :

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

백그라운드로 루프

$BASHPID도 그것을 반영해야한다 (다른 프로세스에서 실행).