【发布时间】:2010-09-19 23:12:04
【问题描述】:
当用户停止脚本(使用 ctrl - c)时,我如何在 bash 脚本中执行命令?
目前,我有这个:
afplay file.mp3
while true:
do osascript -e "set volume 10"
end
但我希望它在用户完成后执行killall afplay,无论它是 command-c 还是其他按键。
【问题讨论】:
当用户停止脚本(使用 ctrl - c)时,我如何在 bash 脚本中执行命令?
目前,我有这个:
afplay file.mp3
while true:
do osascript -e "set volume 10"
end
但我希望它在用户完成后执行killall afplay,无论它是 command-c 还是其他按键。
【问题讨论】:
trap 'killall afplay' EXIT
【讨论】:
使用trap。
trap "kill $pid" INT TERM EXIT
同时避免使用killall 或pkill,因为它可能会杀死不相关的进程(例如,来自脚本的另一个实例,甚至是不同的脚本)。相反,将玩家的 PID 放入一个变量中,然后只杀死那个 PID。
【讨论】:
您需要在 bash 脚本中添加 trap 语句:
trap 'killall afplay' EXIT
但是请注意,如果向 bash 进程发送 KILL 信号 (9),这将不起作用,因为进程无法拦截该信号。
【讨论】: