通常、!! は最後に指定したコマンドを繰り返します。しかし、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