`open`命令什么时候终止?

时间:2016-12-02 15:09:06

标签: bash macos

我有一个bash脚本,它创建一个临时PDF文件,在Skim中打开它,然后将其删除并退出。脚本的最后几行是:

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

这样可以在Skim中成功打开PDF,但即使在我关闭Skim窗口后,脚本也会卡住并且不会执行remove命令。当我关闭窗口时,如何让它移动到最后一行?

3 个答案:

答案 0 :(得分:2)

在这种情况下,{p> int b=2open)不会退出,直到应用程序指示退出。简单地关闭一个窗口显然不会退出Skim;你必须确保你真的退出了申请。

答案 1 :(得分:1)

另一种未经测试的解决方案。如果您不介意等到Skim退出进行删除但仍希望您的脚本继续(或退出)让脚本执行open& rm在后​​台:

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

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

答案 2 :(得分: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