Por que o “Terminal” é substituído por “Applet” no AppleScript?

1

Eu tenho um AppleScript simples (embalado como um aplicativo) que informa ao Terminal para executar algumas linhas de código. De vez em quando - cerca de uma vez a cada 7 a 10 dias - após um reinício a frio, o código foi "corrompido" de alguma forma e a palavra "Terminal" na instrução Tell foi alterada para "Applet" e "do script" comandos foram substituídos por "event coredosc" ". Eu tenho consertado isso apenas clicando em editar no prompt de erro e colando o código correto para o aplicativo. Alguém encontrou isso antes? Nenhum dos meus outros AppleScripts (também empacotados como aplicativos) que dizem ao Terminal para fazer as coisas tem esse problema. Alguém sabe como consertar isso? Eu também tentei re-digitar o código fonte do aplicativo a partir do zero em um novo aplicativo AppleScript e sem dados.

Estou usando o OS X 10.8.4. Aqui está o script:

set myProcessInfo to do shell script ("ps -x")

if myProcessInfo contains "httpd" and myProcessInfo contains "mysql" then
    do shell script "/Applications/MAMP/bin/stopApache.sh"
    do shell script "/Applications/MAMP/bin/stopMysql.sh"
else
    tell application "Terminal"
            do script "/Applications/MAMP/bin/startApache.sh"
            do script "/Applications/MAMP/bin/startMysql.sh > /dev/null"
    end tell
    delay 10
    do shell script "killall Terminal"
end if
    
por SpringSteven 26.08.2013 / 14:09

1 resposta

1

Não sei como você consertaria o que quer que esteja atrapalhando o script, mas você pode contornar isso usando um script de shell:

#!/bin/sh

tempfile=$(mktemp /tmp/XXXXXXXXXX)
ps -x >$tempfile

if grep httpd $tempfile && grep mysql $tempfile
then
    /Applications/MAMP/bin/stopApache.sh
    /Applications/MAMP/bin/stopMysql.sh
else
    /Applications/MAMP/bin/startApache.sh
    /Applications/MAMP/bin/startMysql.sh >/dev/null
fi

rm -f $tempfile

Como mencionei nos comentários, se você tiver scripts para Apache e MySQL que saem com êxito se os daemons respectivos estiverem em execução e sem êxito, você poderá usá-los em vez de gravar ps output em um arquivo temporário e grep pingar.

Como alternativa, você pode usar uma versão modificada do seu AppleScript original, usando apenas do shell script e não tell application "Terminal" to do script :

set myProcessInfo to do shell script ("ps -x")

if myProcessInfo contains "httpd" and myProcessInfo contains "mysql" then
    do shell script "/Applications/MAMP/bin/stopApache.sh"
    do shell script "/Applications/MAMP/bin/stopMysql.sh"
else
    do shell script "/Applications/MAMP/bin/startApache.sh"
    do shell script "/Applications/MAMP/bin/startMysql.sh > /dev/null"
end if
    
por 18.09.2013 / 21:00