以下命令将在以下位置创建一个 pdf 文件~/PDF/
:
enscript -B -P PDF bloom.c
我想将输出的 pdf 文件移至此处
mv "`ls -dtr1 ~/PDF/* | tail -1`" .
但我无法mv
按照命令立即运行该命令enscript
,因为enscript
将输入文件发送到打印机PDF,并在打印机完成创建pdf文件之前立即返回。
一个非常糟糕的解决方案是在两个命令之间插入以下命令
sleep 5
这很糟糕,因为我不知道我还要等多久。
请注意,我知道还有其他更好的方法可以做同样的事情,而不必mv
在之后运行命令enscript
,但我只是想知道是否有任何方法可以阻止enscript
打印机完成其工作?我记得除了 之外,其他命令也有类似的想法enscript
。我假设enscript
没有提供这样的选项,所以对 bash 或其他程序是否可以实现这一点感兴趣。信号处理可能是一个解决方案,但我不知道要捕获哪个信号。
答案1
由于这太大了,无法放入注释,您是否尝试检查~/PDF
目录中的任何文件是否仍然打开当它们开始缠绕时通过使用lsof
(列出打开文件)?
在您的之后添加此代码片段enscript -B -P PDF bloom.c
:
# Go into endless loop and break when all files in */PDF/* are closed.
while :
do
if ! [[ `lsof | grep /PDF/` ]]
then
break
fi
sleep 1
done
和之前
mv "`ls -dtr1 ~/PDF/* | tail -1`"
这样你就只损失了1秒......
欲了解更多信息:
lsof
将列出所有当前打开的文件- 义务
man lsof
将为您提供更多详细信息。
;-)