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-running
se 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 externoseconds-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 while
por for
:
for i in {1..number-of-attempts}; do
try-and-start-server
sleep seconds-to-wait
server-is-not-running || break
done