Bash:成功するまでコマンドを繰り返し実行します。

Bash:成功するまでコマンドを繰り返し実行します。

時々成功する操舵命令があります。

ランニング:

cmd1 || cmd1

最初の実行が失敗した場合は2回実行されます。成功するまでcmd1を実行し続け、各実行間でスリープモードを維持するにはどうすればよいですか?ありがとうございます。

答え1

untilあなたのためにこれをします:

until cmd1; do sleep 1; done

これはcmd1成功するまで実行され、各実行の間に1秒待ちます。

永久に実行されないようにするには、最大反復回数を追加できます。

max=5; until cmd1 || [[ "$max" -le 0 ]]; do sleep 1; ((--max)); done

成功すると、cmd1式全体が成功し$?ゼロになります。正常に実行されず、ループがcmd1終了すると、式全体が失敗し、$?ゼロではありません。これを使用して、実行するアクションを決定できます。

max=5
if until cmd1 || [[ "$max" -le 0 ]]; do sleep 1; ((--max)); done; then
    echo Succeeded
else
    echo Failed
fi

またはより具体的に言えば、

max=5
until cmd1 || [[ "$max" -le 0 ]]; do sleep 1; ((--max)); done
if [ "$?" = 0 ]; then
    echo Succeeded
else
    echo Failed
fi

関連情報