如何在应用程序终止时执行脚本

如何在应用程序终止时执行脚本

要在应用程序启动时执行脚本,我可以Exec更改/usr/share/applications/App.desktop

应用程序关闭时怎么办?该事件有挂钩吗?

答案1

首先,在 中编辑文件通常被认为是一种不好的做法/usr/share/applications。此外,它效率极低,因为它是软件包的一部分,如果该软件包有更新,猜猜会发生什么?您的更改将被覆盖。如果您绝对、100% 需要进行更改,请制作自定义文件.desktop并将其存储在~/.local/share/applications

相反,我建议使用while循环脚本pgrep -f来等待您想要的应用程序。例如,在下面的示例中,脚本使用firefox作为进程字符串。

#!/bin/bash

process_string="firefox"
while true
do

    while ! pgrep -f "$process_string"
    do
       echo "Waiting for $process_string"
       sleep 3
    done

    while pgrep -f "$process_string"
    do
       echo "Waiting for $process_string to exit"
       sleep 3
    done

    # place the command you want to occur when 
    # process exits here
sleep 3
done

该脚本以连续循环运行,因此您可以将其添加为启动应用程序的一部分,以便在登录时启动

答案2

  1. 你可以使用类似

    Exec=bash -c 'do-before;do-main-task;do-after'
    

    在您的桌面文件中。做后应该执行您想要在“应用程序关闭后”执行的操作。它可以是 shell 脚本。我使用这种方法,它对我来说很有效,但由于引用,它可能很棘手。

  2. 您还可以将您的应用程序放入 bash shell 脚本中,该脚本将为您完成所有任务(从脚本调用您的应用程序),并将脚本的名称放在桌面文件中的 Exec 行中。

    Exec=do-all-tasks-script
    

    如果任务包含复杂的语法(并且可能无法在“引号内”起作用),则此方法更有可能起作用。

Serg 的说法很正确,你不应该编辑系统文件。我猜这是一种特殊情况,你可以将桌面文件复制到桌面,然后编辑此副本。(我为自己的应用程序制作了这种桌面文件。)

额外的

我创建了以下批处理文件“dbdmda”

#!/bin/bash

echo do-before
transmission-gtk
echo do-after

并按如下方式运行:传输启动后,我让它运行大约十秒钟。然后我按右上角的 x 按钮退出传输。这被写入终端窗口

$ bash dbdmda 
do-before
do-after

显然,“do-after”命令行已运行。您如何调用传输,又如何停止传输?

相关内容