スクリプトを終了し、同じオプションと引数で再起動します。

スクリプトを終了し、同じオプションと引数で再起動します。

通常、!! は最後に指定したコマンドを繰り返します。しかし、bash スクリプトでは機能しないようです。スクリプトを終了し、前回指定したのとまったく同じオプションと引数で繰り返す方法はありますか?

追加情報: 私のスクリプトの一部では、サーバーが実行中かどうかがチェックされます。実行されていない場合は、etherwake によって起動されます。これは、サーバーが最終的に起動するまで、スクリプトを終了して再起動する部分です。これにより、システム/ネットワークの安定性を脅かす可能性のある無限ループに簡単につながる可能性があるという問題を無視します。

もっと簡単/安全な方法はありますか? GOTO LINE コマンドやそれに類似するものはないようです。

答え1

無限 while ループを作成するだけです:

#!/bin/sh

while [ TRUE ]; 行う

check_server_status 10.0..
etherwake ff:ff..

終わり

答え2

いかがでしょうか

while server-is-not-running; do
    try-and-start-server
    sleep seconds-to-wait
done

どこ

  • server-is-not-runningサーバーが実行中かどうかを確認するための現在のテスト、つまり、サーバーが実行中の場合はシェル関数または外部コマンドがゼロ以外の値を返す(または、サーバーが実行中の! server-is-running場合はその関数またはコマンドがゼロを返す)かどうかを確認します。ランニング)。
  • try-and-start-serverサーバーを起動するコマンドで、これもシェル関数または外部コマンドになります。
  • seconds-to-wait起動が成功するまで待つ適切な秒数です

試行回数を制限するには、whileを に置き換えますfor

for i in {1..number-of-attempts}; do
    try-and-start-server
    sleep seconds-to-wait
    server-is-not-running || break
done

関連情報