Question

J'ai essayer d'attraper un SIGINT ctrl+c à l'intérieur d'une lecture en boucle sur un socket mais la pause, je vous demande seulement de traiter après une nouvelle ligne.Alors, quand je ctrl+c mon application, je dois attendre pour une nouvelle ligne d'arriver dans le support avant la boucle pauses / l'application quitte

C'est le minimum de la version :

trap "break" SIGINT SIGHUP SIGTERM
exec 3<>/dev/tcp/192.168.1.84/50885

while read line  
do   
   echo -e "$line\n" 
done <&3

Comment puis-je immédiatement interrompre la boucle et de quitter l'application?

Était-ce utile?

La solution

Un break n'est pas un vrai de commande, vous pouvez exécuter les où vous voulez;c'est simplement une construction syntaxique pour marquer un point où laisser entouré d'une boucle.Votre break n'a pas entouré d'une boucle, de sorte qu'il n'a pas de sens (et c'est une erreur: bash: break: only meaningful in a `for', `while', or `until' loop).

Vous devez tuer le read commande au lieu de:

trap "killRead" SIGINT SIGHUP SIGTERM

killRead() {
  kill $(cat /tmp/read.pid)
}

exec 3<>/dev/tcp/192.168.1.84/50885

while read line  
do   
   echo -e "$line\n" 
done <&3 & pid=$!

echo $pid > /tmp/read.pid

wait $pid

Bien sûr, ce n'est qu'une très brut de solution, pas de masquer les messages d'erreur émis par résilié sous-coquille etc.Mais il montre que l'idée et permet de résoudre le problème vous m'avez demandé.Pour cacher prévu message d'erreur etc.vous voudrez peut-être poser d'autres questions (ou juste la recherche pour déjà donné les réponses ici ;-)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top