Use o Automator para abrir o shell script, veja a saída no terminal

3

Eu tenho um pequeno problema divertido em execução no Mac OS X 10.8 Mountain Lion.

Eu tenho um script ( run-safari do WebKit) que inicia o Safari no modo dev (define algumas variáveis ambientais e executa arch -x86_64 /Applications/Safari/Contents/MacOS/SafariForWebKitDevelopment ).

Eu quero melhorar este script das seguintes maneiras:

  • Eu quero criar um atalho com duplo clique e com ícones bonitos para ele
  • Eu quero trazer o Safari para o primeiro plano quando executado (atualmente executando o comando deixa o Terminal em primeiro plano e o Safari em segundo plano)
  • Eu quero poder ver o stdout do comando SafariForWebKitDevelopment em uma janela de terminal
  • Se possível, eu gostaria que a janela do Terminal fosse fechada quando o Safari fosse fechado.

Consegui obter dois de três deles combinando scripts Automating, AppleScript e bash, mas não todos os três. Alguém tem algum ponteiro aqui?

    
por int3h 06.11.2012 / 08:12

1 resposta

3

Como sugerido por slhck, criei um AppleScript autônomo que realiza essa tarefa e, em seguida, salvei-o no utilitário de edição do AppleScript como um .app. Faz exatamente o que eu quero.

Abaixo, encontre o script. Ele verifica se o SafariForWebKitDevelopment está em execução, dizendo ao Terminal para executar um script para iniciá-lo, se necessário. (Isso cria automaticamente uma nova janela e eu defino minhas configurações padrão da nova janela do Terminal para fechar uma janela quando o processo terminar.) Em seguida, ele define esse processo como a janela superior.

Eu fui em uma busca desesperada tentando descobrir como lidar com o caso do Safari regular rodando ao mesmo tempo que o SafariForWebKitDevelopment, e finalmente cheguei à solução que você vê no código, trabalhando com processos ao invés de aplicativos. / p>

tell application "System Events"
    -- Only launch development Safari if it isn't already running
    if not (exists process "SafariForWebKitDevelopment") then
        tell application "Terminal"
            do script "run-safari; exit"
            activate
        end tell
    end if

    -- Max number of iterations of checking for process before
    -- we give up and exit the script (guards against errors in
    -- launching SafariForWebKitDevelopment, where the process
    -- would never exist, and this would be an infinite loop)
    set num_checks to 100
    -- Wait until dev Safari has launched
    repeat until (exists process "SafariForWebKitDevelopment")
        delay 0.1

        set num_checks to num_checks - 1
        if num_checks < 0 then
            return
        end if
    end repeat

    -- Set dev Safari to have focus
    -- 'tell application "Safari" to activate' doesn't work because AppleScript 
    -- has no way of discerning between multiple processes from the same .app
    -- bundle, so we can't be sure if we're talking to
    -- SafariForWebKitDevelopment, or an already-running normal Safari

    set frontmost of (process "SafariForWebKitDevelopment") to true
end tell
    
por 07.11.2012 / 13:51