Подождите, пока не вышел определенное приложение, то запустите еще один
Вопрос
на OS X Я хочу выполнить команду OSAScript, которая ждет, пока не указано определенное приложение, указанное на его полномочий .app Path., Затем запустите другое приложение, например.Использование /usr/bin/open -n /Applications/MyApp.app
.
Как добиться ожидания, пока приложение не вышло?
Решение
Общий подход - выполнить петлю ожидания, например, с pgrep
:
while pgrep -f /Applications/TextEdit.app 2>/dev/null ; do sleep 1.0 ; done
.
К сожалению, это будет спать слишком много и задержать начало другого приложения.
В качестве альтернативы, если вы знаете, что приложение запущено, вы можете использовать /usr/bin/open
:
open -g -W /Applications/TextEdit.app
.
К сожалению, это откроет приложение, если он не работает.Вы можете проверить, он работает перед вызовом /usr/bin/open
, но это не будет атомным: он может быть закрыть, а команда открытия может перезапустить его.
Оба могут быть инкапсулированы в OSASSCRICT (хотя он, вероятно, не имеет большого смысла).
osascript -e 'do shell script "while pgrep -f /Applications/TextEdit.app 2>/dev/null ; do sleep 1.0 ; done"'
osascript -e 'do shell script "open -g -W /Applications/TextEdit.app"'
.
Как сбоку Примечание: open -W
фактически выполняет ждать kqueue (не опромирование ожидания) в процессе.Там могут быть другие команды, вызывающие kqueue и выполняют ту же задачу, не рискуя перезапустить приложение.Это довольно легко реализовать в c.