【问题标题】:Run command when bash script is stoppedbash 脚本停止时运行命令
【发布时间】: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 还是其他按键。

【问题讨论】:

    标签: bash macos


    【解决方案1】:

    trap 'killall afplay' EXIT

    【讨论】:

      【解决方案2】:

      使用trap

      trap "kill $pid" INT TERM EXIT
      

      同时避免使用killallpkill,因为它可能会杀死不相关的进程(例如,来自脚本的另一个实例,甚至是不同的脚本)。相反,将玩家的 PID 放入一个变量中,然后只杀死那个 PID。

      【讨论】:

      • 你对抓取进程的pid有什么建议吗? (我想如果该过程是在本地启动的,那么它是直截了当的)
      【解决方案3】:

      您需要在 bash 脚本中添加 trap 语句:

      trap 'killall afplay' EXIT
      

      但是请注意,如果向 bash 进程发送 KILL 信号 (9),这将不起作用,因为进程无法拦截该信号。

      【讨论】:

        猜你喜欢
        • 2021-08-16
        • 1970-01-01
        • 2016-10-20
        • 2018-02-04
        • 1970-01-01
        • 2016-10-01
        • 2015-01-09
        • 2018-08-19
        • 1970-01-01
        相关资源
        最近更新 更多