2008-10-30 13 views
5

Jak mogę w skrypcie bash wykonać polecenie, gdy użytkownik zatrzyma skrypt (za pomocą ctrl-c)?Uruchom polecenie po zatrzymaniu skryptu Bash

Obecnie mam to:

afplay file.mp3 

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

Ale chciałbym to wykonać killall afplay gdy użytkownik jest gotowy z nim, niezależnie od tego czy jest to komenda-c lub inny przyciśnięcie.

Odpowiedz

9

trap 'killall afplay' EXIT

4

Zastosowanie trap.

trap "kill $pid" INT TERM EXIT 

uniknąć także killall lub pkill, ponieważ mogłoby to zabić niepowiązanych procesów (na przykład z innej instancji skryptu lub nawet innego skryptu). Zamiast tego umieść PID gracza w zmiennej i zabij tylko ten PID.

+0

Czy masz jakieś sugestie dotyczące pobrania pid procesu? (Wyobrażam sobie, że jest to proste, jeśli proces rozpoczyna się lokalnie) – isaaclw

2

Trzeba położyć trap oświadczenie w skrypcie bash:

trap 'killall afplay' EXIT 

Należy jednak pamiętać, że to nie będzie działać, jeśli proces bash jest wysyłany sygnał KILL (9), ponieważ nie jest możliwe dla procesów do przechwycić ten sygnał.

Powiązane problemy