rakugakibox.net

技術ノート。兼JS/CSS実験場。 ♡:Java, Spring, AWS.

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

組み込んだはいいけど

参考