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.
Wie kann ich es töten, wenn Skript manuell abgebrochen und erreichen nicht zu kill $SPINNER_PID &>/dev/null
?
Perfect! Vielen Dank. Ich habe das Problem gelöst. – slick
Sie sind sehr willkommen! – frenchDolphin