2016-12-02 63 views
0

我有一个bash脚本,它创建一个临时PDF文件,在Skim中打开它,然后将其删除并退出。脚本的最后一行是:什么时候“open”命令终止?

open -a Skim -W "$PDFFILE" 
rm "$PDFFILE" 

这成功打开在脱脂的PDF,但后来即使我关闭脱脂窗口,脚本卡住,并且不执行删除命令。当我关闭窗口时,怎样才能让它移动到最后一行?

回答

2

open在这种情况下(-W)将不会退出,直到应用程序指示退出。简单地关上窗户显然不会退出Skim;你必须确保你确实退出了应用程序。

+0

当窗口关闭时,有不同的选项可以退出吗?如果我已经用另一个文档打开了Skim,我不想关闭那个窗口,也不想关闭这个窗口以完成一个不相关的过程。...... –

+0

你可以使用'-n'打开一个新的Skim实例;您仍然必须退出才能退出,但您不会退出可能打开其他文档的应用程序。 – chepner

0

如果你运行:

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 
1

另一个未经考验的解决方案。如果你不介意等到脱脂退出做删除,但仍希望你的脚本来继续(或出口)有脚本在后台做open & rm

(open -a Skim -W "$PDFFILE"; rm "$PDFFILE")& 

这将依次运行两个命令在脚本继续时在后台shell中。

+0

好主意!最后,你有一个双引号缺失,顺便说一句。 –

+1

@MarkSetchell - 修正了,谢谢 – CRD

相关问题