Автоматическое шифрование / дешифрование: обнаружение файла закрыто в приложении Mate/Gnome

Я пишу сценарий bash, чтобы автоматически расшифровывать файл для редактирования и шифровать его после закрытия файла. Тип файла может быть любым: обычный текст, офисный документ и т. Д. Я работаю на Linux Mint с Mate.

Я застрял: не могу надежно определить, был ли файл закрыт в приложении, чтобы скрипт мог приступить к его шифрованию и удалению дешифрованной версии.

Первая версия скрипта просто использовала vim с текстовыми файлами. Скрипт вызывал его напрямую и не шел дальше, пока Вим не был закрыт. Теперь, когда я хочу сделать это с другими файлами, я попробовал следующее:

xdg-open: выходит сразу после вызова приложения, связанного с типом файла. Таким образом, сценарий продолжается и не приносит пользы.

Модифицированная функция xdg-open для вызова связанного приложения: запускает его внутри текущего скрипта, так что теперь я вижу выход из программы. Работает, только если приложение еще не запущено. Если это так, то новый процесс завершается, и сценарий продолжается.

Итак, что я сейчас пытаюсь сделать, так это посмотреть, как этот файл был закрыт в уже запущенном приложении. В настоящее время экспериментирую с pluma / gedit и inotifywait. Он также не работает - сразу после открытия файла он обнаруживает событие CLOSE_NOWRITE,CLOSE.

Можно ли вообще обнаружить это без специальных хуков для разных приложений? Возможно, некоторые х крючки?

Спасибо.

2 ответа

Вы могли бы сделать что-то вроде этого.

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

& в конце строки выполнит строку, затем провалится к Плюме. Сценарий будет приостановлен до закрытия пламы.

Я мог бы предложить больше помощи, если вы разместите свой сценарий.

Вы можете использовать lsof, чтобы определить, открыт ли файл процессом:

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

Вы можете использовать 1-секундный цикл и подождать, пока ответ lsof не станет пустым. Я использовал это, чтобы предотвратить открытие сценарием вновь открытого файла, который все еще записывается или загружается.

Не все процессы удерживают файл открытым, пока они его используют. Например, vim сохраняет открытый временный файл (/home/myUser/.myFile.swp) и может открывать настоящий файл только при загрузке или сохранении.

Другие вопросы по тегам