Подождите, пока не вышел определенное приложение, то запустите еще один

StackOverflow https://stackoverflow.com//questions/24018890

  •  21-12-2019
  •  | 
  •  

Вопрос

на 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top