[BASH SCRIPT] Ayuda con uso correcto de trap.

Que tal, buen dia!

Veran, tengo una duda... Voy a crear un pequeño menu con opciones en bash, sin embargo la mayoria de estas opciones invocan un ciclo while que como sabran una de las formas en terminandolo con la señal SIGINT (control + c) sin embargo al realizar esto, automaticamente me saca del script sin regresarme de nuevo al menu de opciones.

Se me ocurrio usar el comando trap, y funciona, pero solo 1 vez, es decir, si vuelvo a escoger la misma opcion y vuelvo a presionar ctrl + c ya no puedo salir del ciclo y por ende no puedo regresar al menu.

Esto es una forma muy muy simple del script que quiero hacer:

#!/bin/bash

declare -x opcion=0;

function menu()
{

      trap menu SIGINT
      echo -e "Ingresa 1\n"
      read opcion

      case $opcion in

         1) while true; do echo -e "\n hola mama"; sleep 2; done ;;

         2) exit;

      esac

}

menu


Como lo dije anteriormente, el trap me funciona solamente 1 vez, si vuelvo a meterme a la opción 1 y presiono ctrl+c ya no sale del menu.

¿Alguna idea o sugerencia para que se pueda utilizar el trap mas de una vez?

Por su atencion, gracias!
Está cascando por que menu es el manejador de la señal que capturas,
y dentro del manejador cuando se ejecuta como tal las señales se desactivan para prevenir algunos fallos.

Con lo cual empiezas la ejecucion llamando tú a "menu", este pone el trap con él mismo de manejador, pulsas Ctrl+c una vez y la señal es capturada y se ejecuta el manejador,
que es la misma función "menu". Pero ahora se está ejecutando en modo manejador, con lo que las señales quedan bloqueadas y por eso te ignora los demás Ctrl+c.
Gracias por tu ayuda demnim, tu solucion que me brindaste por mp funciono perfectamente. Ando perfeccionando el codigo que amablemente me compartiste.

Cuando termine de escribir el codigo lo compartire con ustedes para que otros que tengan la misma necesidad, puedan utilizarlo.
2 respuestas