Как я могу программно определить, какие файлы в настоящее время открыты в evince?

Я открыл PDF-файл с помощью средства просмотра документов из графического интерфейса. Есть ли способ получить путь к этому файлу в терминале / скрипте?

1
задан 12 May 2014 в 09:02

2 ответа

Другой подход будет похож на

$ for ip in $(pgrep -x evince); do lsof -F +p $ip  | grep -oP '^n\K.*\.pdf$'; done
/home/terdon/file1.pdf
/home/terdon/file2.pdf

Объяснение

В общем, всякий раз, когда вы хотите искать процесс, pgrep лучше, чем ps -ef | grep process, поскольку последний также будет соответствовать самому процессу grep. Например:

$ ps -ef | grep emacs
terdon    6647  6424 23 16:26 pts/14   00:00:02 emacs
terdon    6813  6424  0 16:26 pts/14   00:00:00 grep --color emacs
$ pgrep emacs
6647

Параметр -x возвращает только процессы, чье имя совпадает с переданной строкой. Это необходимо, потому что evince также запускает демон (evinced), который также будет сопоставляться без -x (-l должен печатать имя, а также PID):

$ pgrep -l evince
4606 evince
4611 evinced
4613 evince
$ pgrep -lx evince
4606 evince
4613 evince
]

Таким образом, цикл for будет запускать lsof на каждом из PID, возвращаемых pgrep. Затем они проходят через grep. Опция -o означает «распечатать только согласованную часть строки», а -P активирует регулярные выражения, совместимые с Perl, что позволяет нам использовать \K. В PCREs \K означает «отбросить все, что было согласовано до \K ". In other words, since I am using -o , it will match lines beginning with n and ending with .pdf but it will not print the matched n`. В результате печатается только имя файла.

5
ответ дан 24 May 2018 в 07:53

Вам не нужно указывать даже имя файла pdf, открытое через Document Viewer. Эта команда будет отображать пути всех файлов PDF, открытых через Document Viewer. [F3] является фактической командой для открытия Document Viewer через терминал.

ps -ef | grep evince | sed -n '/.*\.pdf/p' | sed 's/.*evince \(.*\)$/\1/g'

Пример:

$ ps -ef | grep evince | sed -n '/.*\.pdf/p' | sed 's/.*evince \(.*\)$/\1/g'
/media/avinash/C68C57908C5779BF/pdf/PHP/PHP-Manual.pdf
/media/avinash/C68C57908C5779BF/pdf/python.pdf

Но все кредиты идут на @Corp.

2
ответ дан 24 May 2018 в 07:53

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

Похожие вопросы: