Finalize o script e reinicie-o com as mesmas opções e argumentos

Finalize o script e reinicie-o com as mesmas opções e argumentos

Geralmente !! repete o último comando dado. Mas parece não funcionar em um script bash. Existe uma maneira de encerrar um script e repeti-lo exatamente com as mesmas opções e argumentos fornecidos da última vez?

informação adicional: Em uma parte do meu script é verificado se um servidor está rodando. Se não estiver, é iniciado por etherwake. Esta é a parte em que quero que o script seja finalizado e reiniciado, até que o servidor finalmente esteja ativo. Ignorar o problema de que isso pode facilmente levar a um loop infinito que pode ameaçar a estabilidade do sistema/rede.

Existe uma maneira mais fácil/segura? Não parece haver um comando GOTO LINE ou algo semelhante.

Responder1

Basta fazer um loop while infinito:

#!/bin/sh

enquanto [VERDADEIRO]; fazer

check_server_status 10.0..
etherwake ff:ff..

feito

Responder2

Que tal

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

onde

  • server-is-not-runningé o seu teste atual para ver se o servidor está em execução, ou seja, uma função shell ou um comando externo retornando diferente de zero se o servidor estiver em execução (alternativamente, ! server-is-runningse essa função ou comando retornar zero se o servidorécorrendo).
  • try-and-start-serveré o comando para iniciar o servidor, que novamente pode ser uma função shell ou um comando externo
  • seconds-to-waité um número razoável de segundos para esperar por um início bem-sucedido

Para limitar o número de tentativas, substitua whilepor for:

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

informação relacionada