Finalice el script y reinícielo con las mismas opciones y argumentos.

Finalice el script y reinícielo con las mismas opciones y argumentos.

Generalmente !! repite el último comando dado. Pero no parece funcionar en un script bash. ¿Hay alguna manera de finalizar un script y repetirlo exactamente con las mismas opciones y argumentos que se dieron la última vez?

información adicional: En una parte de mi script se verifica si se está ejecutando un servidor. Si no es así, se inicia mediante etherwake. Esta es la parte en la que quiero que finalice y reinicie el script, hasta que el servidor finalmente esté activo. Ignorar el problema de que esto puede conducir fácilmente a un bucle sin fin que podría amenazar la estabilidad del sistema/red.

¿Existe una manera más fácil/segura? No parece haber un comando GOTO LINE o algo similar.

Respuesta1

Simplemente haz un bucle while infinito:

#!/bin/sh

mientras [VERDADERO]; hacer

check_server_status 10.0..
etherwake ff:ff..

hecho

Respuesta2

Qué tal si

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

dónde

  • server-is-not-runninges su prueba actual para ver si el servidor se está ejecutando, es decir, una función de shell o un comando externo que devuelve un valor distinto de cero si el servidor se está ejecutando (alternativamente, ! server-is-runningsi esa función o comando devuelve cero si el servidorescorrer).
  • try-and-start-serveres el comando para iniciar el servidor, que nuevamente puede ser una función de shell o un comando externo
  • seconds-to-waitEs un número sensato de segundos para esperar hasta que se inicie correctamente.

Para limitar el número de intentos, reemplace whilecon a for:

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

información relacionada