2008-10-30 6 views
5

Wie kann ich in einem Bash-Skript einen Befehl ausführen, wenn der Benutzer das Skript beendet (mit ctrl - c)?Befehl ausführen, wenn das Bash-Skript gestoppt ist

Derzeit, ich habe dies:

afplay file.mp3 

while true: 
do osascript -e "set volume 10" 
end 

Aber ich möchte es killall afplay auszuführen, wenn der Benutzer damit fertig ist, unabhängig davon, ob es Befehls c oder eine andere Taste ist.

Antwort

9

trap 'killall afplay' EXIT

4

Verwendung trap.

trap "kill $pid" INT TERM EXIT 

Vermeiden Sie auch killall oder pkill, da sie in keinem Zusammenhang Prozesse (zum Beispiel von einer anderen Instanz des Skripts oder sogar ein anderes Skript) töten könnte. Setzen Sie stattdessen die PID des Spielers in eine Variable und töten Sie nur diese PID.

+0

Haben Sie irgendwelche Vorschläge für die PID eines Prozesses? (Ich stelle mir vor, es ist einfach, wenn der Prozess lokal gestartet wird) – isaaclw

2

Sie benötigen eine trap Anweisung in der Bash-Skript zu setzen:

trap 'killall afplay' EXIT 

ist jedoch zu beachten, dass dies nicht funktionieren, wenn der Bash-Prozess ein KILL Signal gesendet wird (9), wie es für Prozesse nicht möglich ist, zu dieses Signal abfangen.

Verwandte Themen