Я очень плохо знаком с сценариями bash, поэтому, возможно, я лаю не на том дереве, но вот моя текущая ситуация:
В сценарии я запускаю soffice ; преобразовать odt в pdf
Кажется, что soffice отрывается от процесса сценария и уходит, чтобы заняться своим делом .. Хорошо, это нормально; Приложения с графическим интерфейсом имеют тенденцию делать это ...
Однако мне нужно подождать, пока новый pdf будет полностью написан, так как мой следующий шаг включает обработку этого нового pdf ,
(Насколько я знаю) я не могу использовать идентификатор процесса soffice, потому что он, возможно, уже был запущенным процессом до того, как мой скрипт запустился: например. soffice может быть уже открыт для нормальной работы GUI для другого не связанного документа / презентации / электронной таблицы.
Суть дела для меня заключается в том, что прежде чем я смогу продолжить, написание нового pdf должно быть завершено ...
Есть ли способ определить когда файл больше не открыт для другого процесса в режиме «запись»? ...
Вы можете использовать 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 из командной строки, используя
blockquote>unoconv -f pdf input.odt
Чтобы получить unoconv, просто запуститеsudo apt-get install unoconv
на терминале. (rhyshale of rhyshale.wordpress.com)