
Я новичок в написании скриптов на 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)