Я хочу написать скрипт, который получает список всех открытых программ и файлов, а затем генерирует скрипт оболочки для повторного открытия этих файлов. Например, если бы я редактировал файл example.txt с помощью gedit и редактировал файл myscript.js с помощью geany, я бы хотел сгенерировать скрипт, который мог бы повторно открыть оба этих файла, используя их соответствующие программы. Есть ли способ получить список запущенных программ и файлов из командной строки?
Существует прием, который можно попробовать [может быть в гноме]
это шоу файлы, открытые процессом [в настоящее время не может с помощью]
Файл истории
/home/$USER/.local/share/recently-used.xbel
может помочь Вам.
Поскольку ДЕМОНСТРАЦИЯ просто копирует вставку
diff <(cat ~/.local/share/recently-used.xbel) <(gedit /tmp/2.txt; cat ~/.local/share/recently-used.xbel)
от вывода можно извлечь имя файла и процесс.
Как правило, это невозможно сделать так, как вы к этому подходите, потому что файлы, открытые в текстовом редакторе, не являются «открытыми» в том смысле, в котором программисты используют термин (то есть «наличие активного дескриптора файла где-то в программа, которая может использоваться для операций ввода-вывода "). Большинство программ открывают файл, читают данные в буфере памяти и закрывают файл. Сохранение файла такое же - открыть, написать, закрыть. Между операциями открытия и сохранения файл не является «открытым», это просто копия данных в буфере программы в памяти.
Таким образом, как правило, невозможно определить, какие файлы в данный момент загружены в память программы, однако сама программа знает, что изнутри программы реализовать тривиально запомнить список открытых файлов при завершении работы и заново открыть эти файлы при запуске. Многие текстовые редакторы, например Kate и Sublime Text 2, предоставляют такую возможность.
В некоторых средах рабочего стола, таких как KDE (а также старый Gnome, я не уверен насчет Gnome 3 / Unity), также есть возможность сохранить список запущенных программ при завершении работы и перезапустить эти программы. на старте. Что в сочетании с использованием хорошего редактора позволяет добиться того, что вы пытаетесь сделать.
Команда ps aux
отобразит список запущенных процессов. В некоторых случаях в нем также будут перечислены файлы, которые редактируются этими программами, если имя файла использовалось в качестве аргумента командной строки при запуске процесса. Например, я открыл файл stuff.txt
с помощью gedit, и gedit /home/anderson/Desktop/stuff.txt
был отображен в выходных данных ps aux
.
Вы можете получить список файлов, открытых с помощью gedit
сегодня (в данном случае 1 июля 2020 г.):
$ grep 2020-07-01 /home/$USER/.local/share/recently-used.xbel
<bookmark href="file:///mnt/e/bin/scpto" added="2020-06-27T00:32:22Z" modified="2020-07-01T20:09:35Z" visited="2020-06-27T00:32:23Z">
<bookmark:application name="gedit" exec="'gedit %u'" modified="2020-07-01T20:09:35Z" count="228"/>
<bookmark href="file:///mnt/e/bin/reset-owner" added="2020-06-30T12:51:15Z" modified="2020-07-01T01:39:20Z" visited="2020-06-30T12:51:15Z">
<bookmark:application name="gedit" exec="'gedit %u'" modified="2020-07-01T01:39:20Z" count="5"/>
Затем вызовите gedit
и передайте ему имена файлов:
gedit /mnt/e/bin/scpto /mnt/e/bin/scpto