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-running
es 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-running
si esa función o comando devuelve cero si el servidorescorrer).try-and-start-server
es el comando para iniciar el servidor, que nuevamente puede ser una función de shell o un comando externoseconds-to-wait
Es un número sensato de segundos para esperar hasta que se inicie correctamente.
Para limitar el número de intentos, reemplace while
con a for
:
for i in {1..number-of-attempts}; do
try-and-start-server
sleep seconds-to-wait
server-is-not-running || break
done