1

У меня есть простой AppleScript (упакованный как приложение), который говорит терминалу выполнить пару строк кода. Время от времени - примерно раз в 7-10 дней - после холодного перезапуска код каким-то образом "повреждается", а слово "Terminal" в операторе "Tell" заменяется на "Applet" и "сценарий do". команды были заменены на "event coredosc". Я исправил это, просто щелкнув по редактированию в приглашении об ошибке и вставив нужный код для приложения. Кто-нибудь сталкивался с этим раньше? Ни у одного из моих других AppleScripts (также упакованных как приложения), которые говорят Терминалу, чтобы делать вещи, нет этой проблемы. Кто-нибудь знает, как это исправить? Я также попытался заново набрать исходный код приложения с нуля в новом приложении AppleScript и без кубиков.

Я использую OS X 10.8.4. Вот сценарий:

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

1 ответ1

1

Я не уверен, как бы вы исправили все, что испортило скрипт, но вы можете обойти это, используя вместо этого скрипт оболочки:

#!/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

Как я упоминал в комментариях, если у вас есть скрипты для Apache и MySQL, которые успешно завершаются, если соответствующие демоны работают, и безуспешно в противном случае, вы можете использовать их вместо записи вывода ps во временный файл и grep ping.

Кроме того, вы можете использовать модифицированную версию вашего оригинального AppleScript, используя только do shell script и не 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .