2008-10-30 15 views
5

¿Cómo puedo, en un script bash, ejecutar un comando cuando el usuario detiene el script (con ctrl - c)?Ejecutar el comando cuando se detiene el script bash

Actualmente, tengo esto:

afplay file.mp3 

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

pero me gustaría que se ejecute killall afplay cuando el usuario ha terminado con él, sin importar si se trata de comando-c u otra pulsación de tecla.

Respuesta

9

trap 'killall afplay' EXIT

4

Uso trap.

trap "kill $pid" INT TERM EXIT 

también evitar killall o pkill, ya que podría matar procesos no relacionados (por ejemplo, desde otra instancia de la secuencia de comandos, o incluso un guión diferente). En cambio, ponga el PID del jugador en una variable y mate solo ese PID.

+0

¿Tiene alguna sugerencia para obtener el pid de un proceso? (Imagino que es sencillo si el proceso se inicia localmente) – isaaclw

2

que necesita para poner una declaración trap en su script bash:

trap 'killall afplay' EXIT 

Nota sin embargo, que esto no funcionará si el proceso fiesta se envía una señal KILL (9) ya que no es posible que los procesos a interceptar esa señal.

Cuestiones relacionadas