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

Я очень плохо знаком с сценариями bash, поэтому, возможно, я лаю не на том дереве, но вот моя текущая ситуация:

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

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

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

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

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

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

21
задан 21 November 2010 в 07:57

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'. Как только файл закрывается, он переходит к «эхо выполнено» и завершает работу.

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

Бонус Похоже, что существует простой способ сохранить odt в pdf:

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

0
ответ дан 21 November 2010 в 07:57

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

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