
Ich bin ein absoluter Neuling im Bereich Bash-Skripting und bin daher möglicherweise auf dem Holzweg, aber hier ist meine aktuelle Situation:
In einem Skript beginne ichAbonnieren; um einodtzu einempdf
Es scheint, dassAbonnierenlöst sich vom Prozess des Skripts und macht sein eigenes Ding. Okay, das ist in Ordnung, das passiert bei GUI-Apps oft ...
Allerdings muss ich warten, bis die neuepdfwurde vollständig geschrieben, da mein nächster Schritt die Verarbeitung dieses neuenpdf.
(Soweit ich weiß) Ich kann die Prozess-ID von SOffice nicht verwenden, da es sich möglicherweise bereits um einen laufenden Prozess handelte, bevor mein Skript gestartet wurde: zB.Abonnierenist möglicherweise bereits für die normale GUI-Aktivität für ein anderes, nicht verwandtes Dokument/eine andere Präsentation/Tabelle geöffnet.
Der springende Punkt für mich ist, dass, bevor ich fortfahren kann, das Schreiben des neuenpdfmuss noch finalisiert werden...
Gibt es eine Möglichkeit, festzustellen, wann eine Dateinicht mehrfür einen anderen Prozess im „Schreib“-Modus öffnen? …
Antwort1
Mit können Sie lsof | grep /absolute/path/to/file.txt
feststellen, ob eine Datei geöffnet ist. Wenn die Datei geöffnet ist, gibt dieser Befehl den Status 0 zurück, andernfalls 256 (1).
Beachten Sie, dass dieser Befehl eine Sekunde dauert, da normalerweise immer viele Dateien geöffnet sind.
lsof -c gedit
Sie können beispielsweise auch verwenden , um zu sehen, welche Datei gedit geöffnet hat. Durch die Beschränkung der Ausgabe auf einen Prozess wird die Ausführungszeit praktisch auf Null reduziert.
Hier ist ein Skript zum Warten:
#!/bin/bash
while :
do
if ! [[ `lsof -c python3.2 | grep test.py` ]]
then
break
fi
sleep 0.5
done
echo "done"
Dies läuft, während ein Prozess „pyhton3.2“ die Datei „test.py“ geöffnet hat. Sobald die Datei geschlossen ist, geht es weiter zu „echo done“ und wird beendet.
Ich habe dort „sleep 0.5“ eingefügt, damit die Schleife die CPU nicht so stark beansprucht. Andernfalls wird die CPU zu 100 % genutzt.
Bonus Es scheint einen einfachen Weg zu geben, ODT in PDF umzuwandeln:
Vielen Dank an scls19fr im OOo-Forum für diesen tollen Tipp. Sie können OpenOffice Writer-Dateien von der Befehlszeile aus in PDF konvertieren, indem Sie
unoconv -f pdf input.odt
unoconv verwenden. Führen Sie es einfachsudo apt-get install unoconv
im Terminal aus. (Rhyshale von rhyshale.wordpress.com)