shell - コマンドが成功するまで何度かリトライする

標準コマンドにありそうでなかったので作った。
色んなコマンドで使いたかったので、ちょい汎用的なファンクションにしました。

function retryable

こんなファンクションを作る。
リトライ回数を変えたい場合は {1..3} を調整する。

function retryable() {
  for i in {1..3}; do
    "$@" && break
  done
  return $?
}

このファンクションの引数に、リトライしたいコマンドを渡せば OK.

成功する場合

$ set -x  # トレース出力用
$ retryable test 0 -eq 0

+ retryable test 0 -eq 0
+ for i in '{1..3}'
+ test 0 -eq 0
+ break
+ return 0

失敗 (リトライ) する場合

$ set -x  # トレース出力用
$ retryable test 0 -eq 1

+ retryable test 0 -eq 1
+ for i in '{1..3}'
+ test 0 -eq 1
+ for i in '{1..3}'
+ test 0 -eq 1
+ for i in '{1..3}'
+ test 0 -eq 1
+ return 1

組み込んだはいいけど

参考