Pergunta

No OS X, desejo executar um comando osascript que aguarde até que um determinado aplicativo especificado por seu caminho .app completo seja encerrado e, em seguida, inicie outro aplicativo, por exemplo.usando /usr/bin/open -n /Applications/MyApp.app.

Como conseguir a espera até que o aplicativo seja encerrado?

Foi útil?

Solução

Uma abordagem comum é realizar um loop de espera, por exemplo com pgrep:

while pgrep -f /Applications/TextEdit.app 2>/dev/null ; do sleep 1.0 ; done

Infelizmente, isso dormirá muito e atrasará o início do outro aplicativo.

Alternativamente, se você sabe que o aplicativo está em execução, você pode usar /usr/bin/open:

open -g -W /Applications/TextEdit.app

Infelizmente, isso abrirá o aplicativo se ele não estiver em execução.Você pode verificar se está funcionando antes de ligar /usr/bin/open, mas isso não seria atômico:poderia estar fechando e o comando open poderia reiniciá-lo.

Ambos podem ser encapsulados em osascript (embora provavelmente não faça muito sentido).

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"'

Como uma nota rodapé: open -W na verdade, executa uma espera kqueue (espera sem polling) no processo.Pode haver outros comandos invocando kqueue e executando a mesma tarefa sem correr o risco de reiniciar o aplicativo.É bastante fácil de implementar em C.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top