2008-10-30 8 views
5

Comment puis-je, dans un script bash, exécuter une commande lorsque l'utilisateur arrête le script (avec ctrl-c)?Commande d'exécution lorsque le script bash est arrêté

Actuellement, j'ai ceci:

afplay file.mp3 

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

Mais je voudrais à exécuter killall afplay lorsque l'utilisateur est terminé avec elle, peu importe si elle est commande c ou d'une autre touche.

Répondre

9

trap 'killall afplay' EXIT

4

Utilisez trap.

trap "kill $pid" INT TERM EXIT 

Evitez également killall ou pkill, car il pourrait tuer les processus non liés (par exemple, d'une autre instance de votre script, ou même un autre script). Au lieu de cela, placez le PID du joueur dans une variable et ne tuez que ce PID.

+0

Avez-vous des suggestions pour saisir le pid d'un processus? (J'imagine que c'est simple si le processus est démarré localement) – isaaclw

2

Vous devez mettre une déclaration trap dans votre script bash:

trap 'killall afplay' EXIT 

Notez cependant que cela ne fonctionnera pas si le processus de bash est envoyé un signal KILL (9) car il est impossible pour les processus de intercepter ce signal.

Questions connexes