在腳本中,如何確定檔案目前是否正在由另一個進程寫入?

在腳本中,如何確定檔案目前是否正在由另一個進程寫入?

我對 bash 腳本非常陌生,所以我可能找錯了樹,但這是我目前的情況:

在腳本中,我開始辦公室;轉換一個奧特到一個pdf

看起來辦公室脫離腳本的流程,開始做自己的事情。 GUI 應用程式往往會這樣做...

不過我需要等到新的pdf已經完全寫好了,因為我的下一步涉及處理新的pdf

(據我所知)我無法利用 soffice 的進程 ID,因為在我的腳本啟動之前它可能已經是一個正在運行的進程:例如。辦公室可能已經為另一個不相關的文件/簡報/電子表格的正常 GUI 活動開啟。

對我來說問題的關鍵是在我繼續之前,新的寫作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”,這樣循環就不會嚴重佔用 CPU。否則,它將使用 100% cpu。

獎金 似乎有一個簡單的方法可以將 odt 轉換為 pdf:

感謝 OOo 論壇上的 sls19fr 提供的這個可愛的提示。您可以使用命令unoconv -f pdf input.odt列 將 OpenOffice Writer 檔案轉換為 PDF sudo apt-get install unoconv(rhyshale.wordpress.com 的 rhyshale)

相關內容