自动加密/解密:检测文件在 Mate/Gnome 应用程序中关闭
Posted
技术标签:
【中文标题】自动加密/解密:检测文件在 Mate/Gnome 应用程序中关闭【英文标题】:Automatic encryption/decryption: detect file is closed in Mate/Gnome application 【发布时间】:2013-02-05 15:29:41 【问题描述】:我正在编写一个 bash 脚本来自动解密文件以进行编辑,并在文件关闭后将其加密回来。文件类型可以是任何类型:纯文本、办公文档等。我在 Linux Mint 和 Mate 上。
我被卡住了:无法可靠地检测文件是否在应用程序中关闭,以便脚本可以继续对其进行加密并删除解密版本。
脚本的第一个版本只是将 vim 与文本文件一起使用。脚本直接调用它,直到 vim 关闭才继续。现在,由于我希望能够对其他文件执行此操作,因此我尝试了以下操作:
xdg-open:调用与文件类型关联的应用程序后立即退出。因此脚本继续执行并没有任何好处。
xdg-open 用于调用关联应用程序的修改函数:在当前脚本中运行它,所以现在我看到程序退出了。仅在应用程序尚未运行时才有效。如果有,则完成新进程并继续执行脚本。
所以我现在要做的是观察该文件以某种方式在已经运行的应用程序中关闭。目前正在尝试使用 pluma/gedit 和 inotifywait。它也不起作用 - 打开文件后立即检测到 CLOSE_NOWRITE,CLOSE 事件。
如果没有针对不同应用程序的特定挂钩,是否有可能检测到这一点?可能是一些 X 钩子?
谢谢。
【问题讨论】:
【参考方案1】:您可以使用 lsof 来确定文件是否被进程打开:
myFile="/home/myUser/myFile"
/usr/sbin/lsof "$myFile" | grep "$myFile"
您可以使用 1 秒的循环并等待 lsof 响应为空。我已使用它来帮助防止脚本打开仍在写入或下载的新发现文件。
并非所有进程在使用文件时都保持打开文件。例如,vim 保持打开一个临时文件 (/home/myUser/.myFile.swp),并且可能只在加载或保存时打开真实文件。
【讨论】:
【参考方案2】:你可能会做这样的事情。
decrypt "TheFile"&
pluma "TheFile"
encrypt "TheFile"
行尾的&
将执行该行,然后传递给 Pluma。脚本将暂停,直到 pluma 关闭。
如果您发布您的脚本,我可以提供更多帮助。
【讨论】:
以上是关于自动加密/解密:检测文件在 Mate/Gnome 应用程序中关闭的主要内容,如果未能解决你的问题,请参考以下文章