0

我正在编写一个 bash 脚本来自动解密文件以进行编辑,并在文件关闭后将其加密回来。文件类型可以是任何类型:纯文本、办公文档等。我在 Linux Mint 和 Mate 上。

我被卡住了:无法可靠地检测文件是否在应用程序中关闭,以便脚本可以继续对其进行加密并删除解密版本。

该脚本的第一个版本只是将 vim 与文本文件一起使用。脚本直接调用它,直到 vim 关闭才继续。现在,由于我希望能够对其他文件执行此操作,因此我尝试了以下操作:

xdg-open:调用与文件类型关联的应用程序后立即退出。因此脚本继续并且没有好处。

xdg-open 用于调用关联应用程序的修改函数:在当前脚本中运行它,所以现在我看到程序退出。仅在应用程序尚未运行时才有效。如果有,则新进程完成,脚本继续。

所以我现在要做的就是以某种方式观察该文件在已经运行的应用程序中被关闭。目前正在尝试使用 pluma/gedit 和 inotifywait。它也不起作用 - 打开文件后立即检测到CLOSE_NOWRITE,CLOSE事件。

如果没有针对不同应用程序的特定钩子,是否有可能检测到这一点?可能有一些 X 钩子?

谢谢你。

4

2 回答 2

0

你可能会做这样的事情。

decrypt "TheFile"&
pluma "TheFile"
encrypt "TheFile"

&尾的 将执行该行然后落到 Pluma。脚本将暂停,直到 pluma 关闭。

如果您发布脚本,我可以提供更多帮助。

于 2015-04-08T20:31:45.913 回答
0

您可以使用 lsof 来确定文件是否被进程打开:

myFile="/home/myUser/myFile"
/usr/sbin/lsof "$myFile" | grep "$myFile"    

您可以使用 1 秒循环并等待 lsof 响应为空。我已经使用它来帮助防止脚本打开仍在写入或下载的新发现文件。

并非所有进程在使用文件时都会打开文件。例如,vim 保持打开一个临时文件 (/home/myUser/.myFile.swp) 并且可能仅在加载或保存时打开真实文件。

于 2013-09-24T18:54:31.143 回答