Estoy configurando un script de shell con menús y submenús, opciones, etc. Pero en cada menú / submenú / etc., necesito la opción "Volver al menú principal".
Ya tengo el menú configurado y funciona bien, pero necesito una forma de reiniciar el script desde cero, restablecer todas las variables, etc.
O una forma de salir del script actual y comenzarlo de nuevo.
He intentado hacer esto:
ScriptLoc=$(readlink -f "$0")
./ScriptLoc
Pero eso inicia el guión "nuevo" dentro del guión "antiguo", por lo que cuando salgo del guión "nuevo", vuelve al guión "antiguo" (si eso tiene sentido). Es un guión dentro de un tipo de guión.
¿Alguien tiene una idea de cómo reiniciarlo por completo?
command-line
scripts
restart
Flor de luna
fuente
fuente
$ScriptLoc
todos modos:./ScriptLoc
busca un script con ese nombre en el directorio actual.Respuestas:
Hazlo
El
exec
comando bash builtin reemplaza el programa actual por uno nuevo.fuente
Puedes usar algo como esto:
$(basename $0)
creará una nueva instancia del script actual yexit
saldrá de la instancia actual del script.Aquí hay un script de prueba que destaca el método anterior:
Si no usa
export count=0
(que hacecount
que sea una variable de entorno) y usa solocount=0
(que hace quecont
una variable de script local), el script nunca se detendrá.fuente
&& exit
saldrá solo si el script tiene éxito. Entonces, si, por ejemplo, el script no es ejecutable o tiene un error de sintaxis, es probable que solo gire.Obtener de manera confiable el script que se está ejecutando actualmente es más difícil de lo que piensas. Ver http://mywiki.wooledge.org/BashFAQ/028 .
En cambio, podrías hacer algo como esto:
Básicamente, ejecuta la función main_menu en un subshell, por lo que si sale del main_menu, o de cualquiera de los submenús, sale del subshell, no del shell principal. El estado de salida 255 se elige aquí para significar "ir de nuevo". Cualquier otro estado de salida saldrá del bucle infinito.
fuente