2017-10-12 2 views
4

以下のシェルスクリプトでは、バックグラウンドで2つのコマンドを並行して実行して、処理を高速化し、処理が完了するのを待ってからさらにコマンドを実行していきたいと考えています。複数の並列バックグラウンド・プロセスに同じ変数名を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

あなたのスクリプトは、あなたは少し実験により明らかに可能性があるので安全である:($BASHPIDはあまりにもそれを反映すべきである

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

バックグラウンドにループが異なるプロセスで実行します。

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

スクリプトの出力)。

関連する問題