¿Cómo, en un script, puedo determinar si otro proceso está escribiendo actualmente un archivo?

¿Cómo, en un script, puedo determinar si otro proceso está escribiendo actualmente un archivo?

Soy muy nuevo en las secuencias de comandos bash, por lo que podría estar ladrando al árbol equivocado, pero esta es mi situación actual:

En un guión empiezooficina; para convertir unextrañoa unpdf

Parece queoficinase separa del proceso del guión y se aleja para hacer lo suyo... Está bien, está bien; Las aplicaciones GUI tienden a hacer eso...

Sin embargo tengo que esperar hasta el nuevopdfha sido completamente escrito, ya que mi próximo paso implica procesar ese nuevopdf.

(Hasta donde yo sé) No puedo utilizar el ID de proceso de Soffice, porque es posible que ya haya sido un proceso en ejecución antes de que comenzara mi script: por ejemplo.oficinaEs posible que ya esté abierto para la actividad GUI normal de otro documento/presentación/hoja de cálculo no relacionado.

El quid de la cuestión para mí es que antes de poder continuar, la redacción del nuevopdfhay que finalizar....

¿Hay alguna manera de determinar cuándo un archivo estáno más¿Abrir a otro proceso en modo "escritura"? ...

Respuesta1

Puede utilizar lsof | grep /absolute/path/to/file.txtpara ver si un archivo está abierto. Si el archivo está abierto, este comando devolverá el estado 0; de lo contrario, devolverá 256 (1).

Tenga en cuenta que este comando tardará un segundo ya que normalmente hay muchos archivos abiertos en cualquier momento.

También puedes utilizar lsof -c gedit, por ejemplo, para ver qué archivo se ha abierto gedit. Restringir la salida a un proceso reducirá el tiempo de ejecución a prácticamente nada.

Aquí hay un guión para esperar:

#!/bin/bash

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

Esto se ejecuta mientras un proceso 'pyhton3.2' tiene abierto el archivo 'test.py'. Tan pronto como se cierra el archivo, pasa a "eco hecho" y sale.

Puse 'suspensión 0.5' allí para que el bucle no acapare tanto la CPU. De lo contrario, utilizará el 100% de la CPU.

Prima Parece haber una manera fácil de convertir odt a pdf:

Gracias a scls19fr en el foro OOo por este encantador consejo. Puede convertir archivos de OpenOffice Writer a PDF desde la línea de comando usando unoconv -f pdf input.odtPara obtener unoconv, simplemente ejecútelo sudo apt-get install unoconven la terminal. (rhyshale de rhyshale.wordpress.com)

información relacionada