在用户停止脚本时(使用ctrl -c),如何在bash脚本中执行命令?
目前,我有这个:
afplay file.mp3
while true:
do osascript -e "set volume 10"
end
但我希望它在用户完成后执行killall afplay
,无论它是command-c还是其他按键。
答案 0 :(得分:9)
trap 'killall afplay' EXIT
答案 1 :(得分:4)
使用trap
。
trap "kill $pid" INT TERM EXIT
还要避免使用killall
或pkill
,因为它可以杀死不相关的进程(例如,来自脚本的另一个实例,甚至是不同的脚本)。相反,将玩家的PID置于变量中并仅杀死该PID。
答案 2 :(得分:2)
您需要在bash脚本中添加trap
语句:
trap 'killall afplay' EXIT
但是请注意,如果bash进程发送KILL
信号(9),这将无效,因为进程无法拦截该信号。