bash スクリプトは最初の 2 つの curl コマンドのみを実行し、その後は停止します

bash スクリプトは最初の 2 つの curl コマンドのみを実行し、その後は停止します

URLがほとんどないテキストファイルがあります

販売データ.txt

http://localhost:9380/run?startDate=2018-12-01&endDate=2018-12-31
http://localhost:9380/run?startDate=2018-10-01&endDate=2018-10-31
http://localhost:9380/run?startDate=2018-09-01&endDate=2018-09-30
http://localhost:9380/run?startDate=2018-08-01&endDate=2018-08-31

そして以下のような bash スクリプト:

mapfile -t salesData < salesData.txt
i=0
echo 'hii'${i};     
while [ ${i} -lt ${#salesData[@]} ] ; do 
  echo "Iteration Number is " ${i} >> audit.txt
  curl -s --max-time 3600 ${salesData[${i}]}
  sleep 30
  echo "Successfully completed curl"
  ((i++))
done

このスクリプトは最初の 2 つの curl コマンドのみを実行しており、突然停止します。私は Linux サーバーで、そのボックスへの ssh 接続を使用してこれを実行しています。最初の 2 つだけでなく、すべての curl コマンドが順番に実行されるようにするにはどうしたらよいでしょうか。12 個の curl コマンドを含む、はるかに大きなデータを取得する必要があり、スクリプトがタイムアウトすることなく、それらを順番に実行したいと考えています。

誰かこれについてアドバイスをいただけませんか?

答え1

つまり、このスクリプトには Bashism が大量に含まれています。一般的に、本当に必要な場合を除いて、POSIX に固執するのが最善です。次に例を示します。

n1=0
while read each
do
   echo "Iteration Number is $n1" >> audio.txt
   curl -s --max-time 3600 "$each"
   n1=$(( n1 + 1 ))
done < salesData.txt

関連情報