Não é necessário (como algumas outras respostas sugeriram) usar killall (ou similar) para matar o processo de aplicativo AppleScript ("applet") neste cenário. Ele pode até ter efeitos colaterais desagradáveis se o nome / padrão dado a killall corresponder a mais do que apenas o processo de applet pai (por exemplo, outros aplicativos AppleScript concorrentes (se estiver usando “applet” como padrão)).
Algo como kill $PPID
pode ser mais razoável, mas podemos não querer supor que o applet de um aplicativo AppleScript seja sempre o pai imediato do shell iniciado por do shell script . Felizmente, existe uma maneira perfeitamente razoável de fazer o que você precisa.
Por TN2065 (em “Desejo iniciar um processo do servidor de segundo plano; como faço o shell script não espera até que o comando seja concluído? ”), o método apropriado é redirecionar stdout e stderr e fazer com que o shell execute o programa em segundo plano.
Use o Editor de scripts para salvar o seguinte programa como um aplicativo AppleScript:
do shell script ¬
"/Applications/Firefox.app/Contents/MacOS/firefox-bin \
-P default -no-remote \
>/dev/null 2>&1 &"
(quebras de linha funcionais adicionadas para mantê-lo "estreito"; excluir o ¬
e \
e colocar tudo em uma linha longa, se quiser)
Ele será executado por tempo suficiente para iniciar o Firefox e sairá corretamente enquanto o Firefox continuar em execução.
O redirecionamento é necessário porque o script não apenas espera que seu filho imediato (o shell) saia, mas também aguarda (todas as instâncias) as extremidades graváveis dos canais cria para que a stdout e stderr do shell sejam fechadas. Os stdout e stderr do shell (os pipes do script de shell ) são herdados pelos programas que são executados sem redirecionamento (mesmo os executados em segundo plano com &
); o redirecionamento garante que o shell seja o último a manter as extremidades graváveis dos pipes. Assim, o shell script retornará imediatamente após o shell sair, permitindo que o próprio aplicativo AppleScript saia (já que do shell script é a última expressão do programa AppleScript).
As outras respostas que usam abertas dentro do script shell funcionam porque aberto (na verdade, LaunchServices) faz o trabalho equivalente de fazer o programa resultante e enviando sua stdout e stderr em outro lugar.