我有一个bash脚本,它创建一个临时PDF文件,在Skim中打开它,然后将其删除并退出。脚本的最后一行是:什么时候“open”命令终止?
open -a Skim -W "$PDFFILE"
rm "$PDFFILE"
这成功打开在脱脂的PDF,但后来即使我关闭脱脂窗口,脚本卡住,并且不执行删除命令。当我关闭窗口时,怎样才能让它移动到最后一行?
我有一个bash脚本,它创建一个临时PDF文件,在Skim中打开它,然后将其删除并退出。脚本的最后一行是:什么时候“open”命令终止?
open -a Skim -W "$PDFFILE"
rm "$PDFFILE"
这成功打开在脱脂的PDF,但后来即使我关闭脱脂窗口,脚本卡住,并且不执行删除命令。当我关闭窗口时,怎样才能让它移动到最后一行?
open
在这种情况下(-W
)将不会退出,直到应用程序指示退出。简单地关上窗户显然不会退出Skim;你必须确保你确实退出了应用程序。
如果你运行:
osascript -e 'tell application "Skim" to documents'
它会告诉你的是目前正在积极在Skim
编辑文档的列表。
所以,如果你知道你告诉Skim
打开文档的名称,你可以大概在一个循环(也许在它短暂的延迟)在bash
等到那个文件不再是开放的 - 即不再列表。
它应该是这样的:
#!/bin/bash
PDFFILE="/Users/mark/Desktop/OpenCV_2_Computer_Vision_Application_Programming_Cookbook.pdf"
PDFBASE=$(basename "$PDFFILE")
open -a Skim "$PDFFILE" &
while :; do
osascript -e 'tell application "Skim" to documents' | grep "$PDFBASE" || break
sleep 1
done
另一个未经考验的解决方案。如果你不介意等到脱脂退出做删除,但仍希望你的脚本来继续(或出口)有脚本在后台做open
& rm
:
(open -a Skim -W "$PDFFILE"; rm "$PDFFILE")&
这将依次运行两个命令在脚本继续时在后台shell中。
好主意!最后,你有一个双引号缺失,顺便说一句。 –
@MarkSetchell - 修正了,谢谢 – CRD
当窗口关闭时,有不同的选项可以退出吗?如果我已经用另一个文档打开了Skim,我不想关闭那个窗口,也不想关闭这个窗口以完成一个不相关的过程。...... –
你可以使用'-n'打开一个新的Skim实例;您仍然必须退出才能退出,但您不会退出可能打开其他文档的应用程序。 – chepner