我对 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 论坛上的 scls19fr 提供的这个好建议。您可以使用命令行将 OpenOffice Writer 文件转换为 PDF。
unoconv -f pdf input.odt
要获取 unoconv,只需sudo apt-get install unoconv
在终端上运行即可。 (rhyshale 的 rhyshale.wordpress.com)