"for do() & wait" ループの bash 共有配列

以下のスクリプトに問題があります。 forループのSQL文を使用して変数を設定し、ログファイルを生成します。現在のデータベースは+ - 1200行の出力を生成します。

元のバージョンには、各ループ(ディスクに対する書き込み操作)ごとにテキストファイル(report.csv)に1行を追加するコメント付きエコー行があります。

新しい予想バージョンはデータを配列(dcimlog)に追加し、newreport.csvのデータセット全体に対して1回の書き込み操作のみを実行します。

私の問題は、どういうわけかサブプロセスが配列を正しく追加しないため、newreport.csvにforループの前に完了した最初の行だけが含まれ、サブプロセスによって追加されないことです。

行の順序は重要ではありませんが、実行速度は重要なので、「do()&」 - これが失敗の原因である可能性があると思います...

どのように動作させることができるか知っていますか?

N=$(nproc)
dcimlog=();dcimlog=("${dcimlog[@]}" "何か") # 有効
私は「${sqlanswer[@]}」で行います。
    (echo somework#SQLからデータを取得する
    # echo "$DDeviceID;$NBPort;$PortNumber;$CConnectedDevice;$Connectedport;$CabinetLocation;$HeightDevice;$PositionDevice;$ZoneName;$DataCenterName" >> レポート.csv
    dcimlog=("${dcimlog[@]}" "$DDeviceID;$NBPort;$PortNumber;$CConnectedDevice;$Connectedport;$CabinetLocation;$HeightDevice;$PositionDevice;$ZoneName;$DataCenterName") # 機能しない
)&
    if [[ $(jobs -r -p | wc -l) -gt $N ]];
            ちょっと待って
    フィリピン諸島
完璧
待つ
echo "${dcimlog[@]}" > newreport.csv

ベストアンサー1

前と同様に、ループ全体の標準出力をファイルにreport.csv内部的にリダイレクトすることを検討してください。echo良い

for i in "${sqlanswer[@]}"; do
    ( echo somework #get the data from sql
      echo "$DDeviceID;$NBPort;$PortNumber;$CConnectedDevice;$Connectedport;$CabinetLocation;$HeightDevice;$PositionDevice;$ZoneName;$DataCenterName"
    ) &
  done > report.csv

おすすめ記事