2016-05-24 5 views
1

Ich habe ein Skript, das etwas Arbeit macht. Es macht es richtig, aber es dauert eine Weile bevor es endet. Da ich simulieren möchte, dass "Job jetzt läuft", habe ich eine Spinner-Cursor-Animation hinzugefügt.Wie wird ein Prozess abgebrochen, wenn Strg + C in einem Shell-Skript gedrückt wird?

ich es am Anfang meines Skript aufrufen, dann habe ich die PID dieser Funktion einer Variablen zuweisen und wenn alles erledigt ist, ich es einfach töten, um die Animation zu stoppen.

#!/bin/bash 

spinner & 
SPINNER_PID=$! 

# a lot of stuff going on here... 
# takes some time to finish 

kill $SPINNER_PID &>/dev/null 

printf "All done" 

Funktionsdefinition:

spinner() { 
    local i sp n 
    sp='/-\|' 
    n=${#sp} 
    while sleep 0.1; do 
    printf "%s\b" "${sp:i++%n:1}" 
    done 
} 

alles funktioniert gut, wenn ich nicht unterbrechen wird.

Stellen Sie sich vor, dass ich durch den Aufruf Control+C meine lange Aufgabe abgebrochen werden soll. Es bricht ab, aber der Spinner animiert offensichtlich immer noch, da es sonst eine Endlosschleife gibt.

enter image description here

Wie kann ich es töten, wenn Skript manuell abgebrochen und erreichen nicht zu kill $SPINNER_PID &>/dev/null?

Antwort

3

Es scheint eine Anweisung mit dem Namen trap zu sein, mit der Sie Code ausführen können, wenn Ctrl-C gedrückt wird. Es gibt eine gute Erklärung dafür here und this website erläutert, wie eine Funktion auf Ctrl-C auszuführen.

trap your_func INT 
+0

Perfect! Vielen Dank. Ich habe das Problem gelöst. – slick

+0

Sie sind sehr willkommen! – frenchDolphin