Bashスクリプトはプロセスを待って戻りコードを受け取ります。

Bashスクリプトはプロセスを待って戻りコードを受け取ります。

多くのバックグラウンドコマンドを実行するスクリプトを作成しようとしています。各バックグラウンドコマンドに対して戻りコードを取得する必要があります。

私は次のスクリプトを試しました。

 #!/bin/bash
set -x
pid=()
return=()


for i in 1 2
do
 echo start $i
 ssh mysql "/root/test$i.sh" &
 pid[$i]=$!
done

for i in ${#pid[@]}
do
echo ${pid[$i]}
wait ${pid[$i]}
return[$i]=$?

if [ ${return[$i]} -ne 0 ]
then
  echo mail error
fi

done

echo ${return[1]}
echo ${return[2]}

私の問題は、待機ループ中に2番目のPIDが最初のPIDの前に完了すると、戻りコードを取得できないことです。

wait pid1 pid2を実行できることを知っていますが、このコマンドを使用するすべてのコマンドの戻りコードを取得することはできません。

どんなアイデアがありますか?

ベストアンサー1

問題はもっとあなたのものです

for i in ${#pid[@]}

これはfor i in 2

それが必要です:

for i in 1 2

または

for ((i = 1; i <= ${#pid[@]}; i++))

wait "$pid" 〜するbashzshジョブのwait開始時に終了した場合でもジョブの終了コードを返すには(およびPOSIXシェルを使用しますが)を使用します。

おすすめ記事