Bueno, me estoy pelendo con el Bash estos ultimos dias, y no hay forma de conseguir lo que quiero...
El problema es que en un momento determinado de mi script, entro en un menu en el que el usuario tiene distintas opciones para poder desautentificar para conseguir el handshake de un AP. A su vez, antes de entrar en el menu, se ejecuta una funcion en el backround que se encarga de comprobar si el handshake ha sido capturado o no, y cuando se capturó, cerrarse a si misma y pasar al siguiente apartado (en mi caso, el siguiente apartado es
webinterface). El problema de eso, es que todavía estaba abierto el menu, y no śe como poder cerrarlo para no crear problemas.
checkhandshakestatus=0
while [ "$checkhandshakestatus" = 0 ]; do
checkhandshake &
echo "¿SE CAPTURÓ el HANDSHAKE?"
echo " "
echo -e " 2) No (lanzar ataque de nuevo)"
echo -e " 3) No (seleccionar otro ataque)"
echo -e " 4) Seleccionar otra red"
echo -e " 5) Salir"
echo " "
echo -n ' #> '
read yn
case $yn in
2 ) capture; $DEAUTH ;;
3 ) conditional_clear; askclientsel; break;;
4 ) killall airodump-ng &>$linset_output_device; CSVDB=dump-01.csv; breakmode=1; selection; break ;;
5 ) exitmode; break;;
* ) echo "Opción desconocida. Elige de nuevo"; conditional_clear ;;
esac
done
cuando la función del backround verifica que se capturó el handshake, modifica la variable
checkhandshakestatus a valor
1. Al haber un
case dentro del loop, no hay ningun avance hasta que el usuario no haga algo, para volver a verificar el valor de
checkhandshakestatus y poder salir...
La función que se encarga de comprobar el handshake es esta:
function checkhandshake {
sleep 4
until [ "$checkhandshakestatus" = 1 ]; do
if aircrack-ng $DUMP_PATH/$Host_MAC-01.cap | grep -q "1 handshake"; then
checkhandshakestatus=1
killall airodump-ng &>$linset_output_device
killall aircrack-ng &>$linset_output_device
fi
if [ "$checkhandshakestatus" = 1 ]; then
break # Se sale del loop
fi
sleep 0.6
checkhandshakestatus=0
done
webinterface # Se avanza al proximo apartado
exit # Se cierra esta funcion del background
}
He probado sacando el PID de las funciones, y matandola cuando se encuentra el handshake, pero no me ha funcionado, porque devuelve un mensaje que el
read del siguiente apartado interpreta como respuesta, y me devuelve un error de entrada y salida del script....
Alguna idea?

Salu2