2008-10-30 29 views
5

Kullanıcı, betiği durdurduğunda (ctrl - c ile), bir betik betiğinde nasıl komut çalıştırabilirim?Bash betiği durduğunda komut çalıştır

Halen ben bu vardır:

afplay file.mp3 

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

Ama komut c veya başka tuşa basma ise ben ne olursa olsun, kullanıcı onunla bittiğinde o killall afplay yürütmek istiyoruz.

cevap

9

trap 'killall afplay' EXIT

4

kullanın trap. o (Senaryonuzun, hatta farklı bir senaryonun başka örneği, örneğin) ilgisiz süreçleri öldürebilir beri

trap "kill $pid" INT TERM EXIT 

Ayrıca killall veya pkill kaçının. Bunun yerine, oyuncunun PID'sini bir değişkene koyun ve sadece bu PID'yi öldürün. bash süreci KILL sinyali (9) o kadar süreçleri için mümkün değildir halinde gönderilirse

trap 'killall afplay' EXIT 

Not ancak bu çalışmaz:

+0

Bir işlemin pidine yakalanmak için herhangi bir öneriniz var mı? (Süreç yerel olarak başlatılmışsa, ileriye doğru ilerlediğini hayal ediyorum) – isaaclw

2

Sen bash komut bir trap deyimi koymak gerekir Bu sinyali kes.