2016-12-02 2 views
0

У меня есть скрипт bash, который создает временный файл PDF, открывает его в Skim, затем удаляет его и завершает. Последние строки сценария являются:Когда команда `open` завершается?

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

Это успешно открывает PDF в снятом, но даже после того, как я закрыть окно Обезжиренное, сценарий застревает и не выполняет команды удаления. Как я могу заставить его перейти к последней строке, когда я закрою окно?

ответ

2

open в этом случае (-W) не будет выходить, пока заявка не будет показана. Просто закрытие окна, по-видимому, не выходит из Skim; вам нужно будет убедиться, что вы действительно покинули приложение.

+0

Есть ли другой вариант выхода, когда окно закрывается? Если у меня уже есть Skim open с другим документом, я бы не захотел закрыть это окно, чтобы закончить не связанный процесс. –

+0

Вы можете использовать '-n', чтобы открыть новый экземпляр Skim ; вам все равно придется выйти, чтобы закрыть 'open', но вы не оставите приложение, которое, возможно, откроет другие документы. – 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")& 

Это будет работать две команды последовательно в фоновом режиме, пока ваш сценарий продолжается.

+0

Прохладная идея! У вас двойная цитата отсутствует в конце, кстати. –

+1

@MarkSetchell - исправлено, спасибо – CRD

Смежные вопросы