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

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

Я новичок в написании скриптов на bash, поэтому могу ошибаться, но вот моя текущая ситуация:

В сценарии я начинаюsoffice; преобразоватьodtкpdf

Кажется, чтоsofficeотсоединяется от процесса скрипта и уходит заниматься своими делами. Ладно, это нормально; приложения с графическим интерфейсом, как правило, так и делают...

Однако мне нужно подождать, пока новыйpdfполностью написан, так как мой следующий шаг включает обработку этого новогоpdf.

(Насколько мне известно) я не могу использовать идентификатор процесса soffice, поскольку он мог уже быть запущенным до запуска моего скрипта, например:sofficeможет быть уже открыт для обычной работы с графическим интерфейсом пользователя для другого несвязанного документа/презентации/электронной таблицы.

Суть вопроса для меня в том, что прежде чем я смогу продолжить, необходимо написание новогоpdfнеобходимо завершить...

Есть ли способ определить, когда файлбольше никогдаоткрыть для другого процесса в режиме «записи»? ...

решение1

Вы можете использовать lsof | grep /absolute/path/to/file.txt, чтобы узнать, открыт ли файл. Если файл открыт, эта команда вернет статус 0, в противном случае она вернет 256 (1).

Имейте в виду, что выполнение этой команды займет секунду, поскольку обычно одновременно открыто множество файлов.

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

Вот скрипт для ожидания:

#!/bin/bash

while :
do
    if ! [[ `lsof -c python3.2 | grep test.py` ]]
    then
        break
    fi
    sleep 0.5
done
echo "done"

Это выполняется, пока процесс 'pyhton3.2' открыл файл 'test.py'. Как только файл закрывается, он переходит к 'echo done' и завершается.

Я вставил туда 'sleep 0.5', чтобы цикл не так сильно нагружал процессор. В противном случае он будет использовать 100% процессора.

Бонус Кажется, есть простой способ преобразовать ODT в PDF:

Спасибо scls19fr на форуме OOo за этот прекрасный совет. Вы можете конвертировать файлы OpenOffice Writer в PDF из командной строки, используя unoconv -f pdf input.odtЧтобы получить unoconv, просто запустите sudo apt-get install unoconvв терминале. (Райшел из rhyshale.wordpress.com)

Связанный контент