
Sou muito novo em scripts bash, então posso estar latindo para a árvore errada, mas aqui está minha situação atual:
Em um script, eu começoescritório; para converter umestranhopara umpdf
Parece queescritóriose separa do processo do script e sai para fazer suas próprias coisas. Ok, tudo bem; Aplicativos GUI tendem a fazer isso ...
No entanto, preciso esperar até o novopdffoi totalmente escrito, pois meu próximo passo envolve processar esse novopdf.
(Até onde eu sei) Não posso utilizar o ID do processo do soffice, porque pode já ter sido um processo em execução antes do início do meu script: por exemplo.escritóriopode já estar aberto para atividade normal da GUI para outro documento/apresentação/planilha não relacionado.
O cerne da questão para mim é que antes que eu possa prosseguir, a escrita do novopdfdeve ser finalizado...
Existe alguma maneira de determinar quando um arquivo énão maisaberto para outro processo no modo "gravação"? ...
Responder1
Você pode usar lsof | grep /absolute/path/to/file.txt
para ver se um arquivo está aberto. Se o arquivo estiver aberto, este comando retornará o status 0, caso contrário retornará 256 (1).
Esteja ciente de que este comando levará um segundo, pois normalmente há muitos arquivos abertos a qualquer momento.
Você também pode usar lsof -c gedit
, por exemplo, para ver qual arquivo o gedit abriu. Restringir a saída a um processo reduzirá o tempo de execução a praticamente zero.
Aqui está um script para esperar:
#!/bin/bash
while :
do
if ! [[ `lsof -c python3.2 | grep test.py` ]]
then
break
fi
sleep 0.5
done
echo "done"
Isso é executado enquanto um processo 'pyhton3.2' abre o arquivo 'test.py'. Assim que o arquivo é fechado, ele passa para 'eco concluído' e sai.
Eu coloquei 'sleep 0.5' lá para que o loop não sobrecarregue tanto a CPU. Caso contrário, usará 100% da CPU.
Bônus Parece haver uma maneira fácil de transformar odt em pdf:
Obrigado ao scls19fr no Fórum OOo por esta dica adorável. Você pode converter arquivos do OpenOffice Writer em PDF a partir da linha de comando usando
unoconv -f pdf input.odt
Para obter o unoconv, basta executarsudo apt-get install unoconv
no terminal. (rhyshale de rhyshale.wordpress.com)