我对bash脚本非常陌生,因此我可能会拨错树,但这是我目前的情况:
在脚本中,我开始soffice;将odt转换为pdf
似乎soffice使自己脱离了脚本的过程,并且徘徊去做自己的事情。GUI应用程序倾向于这样做...
但是,我需要等到新pdf完全写入后,因为我的下一步涉及处理该新pdf。
(据我所知)我无法使用Soffice的进程ID,因为在脚本开始之前它可能已经是一个正在运行的进程。对于其他不相关的文档/演示文稿/电子表格,常规的GUI活动可能已经打开办公室。
对我而言,问题的症结在于,在我继续之前,必须完成新pdf的撰写...
有什么方法可以确定何时不再以“写入”模式向另一个进程打开文件?...
您可以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.wordpress.com的rhyshale)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句