嘿,我正在尝试编写bash脚本并有一个问题。检查特定文件是否未打开并完成写入的最佳方法是什么。我需要在if语句中执行此操作吗?
伪代码:
If abc.txt not opened
Do this
Else
Do this
答案 0 :(得分:2)
检查文件是否已完成写入的最佳方法是使写入器发出已完成信号。该信号可以采用多种形式,但是一种常见的信号形式是仅在完成所有写入后才创建所需的文件名。这是通过写入临时文件来完成的,只有在写入成功完成后才将其重命名:
SUBSTRING
现在,作为消费者的您可以放心,如果cp foo bar.tmp && mv bar.tmp bar
some_long_process > bar.tmp && mv bar.tmp bar
完全存在 ,那么它就可以使用了。
bar
答案 1 :(得分:1)
使用lsof命令,您可以获得当前打开的文件。
$> lsof | grep abc.txt | wc -l
如果该值不为0,则打开文件。 如果知道应该使用该文件的进程的pid,则可以使用-p选项使用它来过滤结果。
$> lsof -p <pid>