Как запустить приложение AppleScript и запустить сценарии оболочки из другого AppleScript?

вот мои файлы:

лаунчер.помощью AppleScript

tell application ":path:to:applescript:apps:shell-script-launcher.app" to launch

shell-script-launcher.app [AppleScript, сохраненный как приложение]

 do shell script "say starting script"

нужный вариант:

  1. запустить " launcher.помощью AppleScript" с помощью AppleScript редактор
  2. слушайте "запуск сценария"

фактическое поведение:

  1. запуск программы "shell-script-launcher".app", открыв его вручную в finder, дает ожидаемые результаты поведение
  2. запуск " launcher.applescript "открывает" shell-script-launcher.приложение" но он никогда не выполняет скрипт.

Я попытался сохранить приложение как "только запустить", а также"оставаться открытым". Никакого прогресса. Что вы порекомендуете? Конечным результатом должно быть приложение вместо Applescript.

7 ответов


принципиально:

  • the первый.

опции


  • @user309603 это прагматичным решением просто использует do shell script стандартный open утилиты чтобы обойти проблему - это должно работать, независимо от того, является ли приложение помощью AppleScript или не:
do shell script "open " & ¬
    quoted form of POSIX path of ¬
    alias ":path:to:applescript:apps:shell-script-launcher.app"

  • если вы знать тип приложения вы призываете вперед:

    • запустить на основе AppleScript app: лучше всего использовать run script file, как рекомендует @regulus6633 - это имеет дополнительное преимущество, что вызываемое приложение на основе AppleScript может возвращать объекты непосредственно вызывающему абоненту:
run script file ":path:to:applescript:apps:shell-script-launcher.app"

Примечание: есть также load script file, которым действительно позволяет вам просто загрузить код сценария, не выполняя его сразу.

  • для выполнения non-AppleScript приложения: используйте run / activate для запуска приложения hidden / frontmost:
run application ":path:to:applescript:apps:shell-script-launcher.app"

  • вы можете использовать run даже с приложениями на основе AppleScript и просто игнорировать ошибки с try ... end try, как предполагает @atonus-недостатком является то, что вы не сможете обнаружить фактический отказ от вызова приложения.

вы можете смягчить это, выборочно игнорируя только конкретные Connection invalid ошибка (которая предполагает, что эта ошибка не будет законно возникать) [больше не требуется на OSX 10.10]:

try
    run application "Macintosh HD:Applications:_Sandbox-AppleScript0.app"
on error number -609 # 'Connection is invalid' error that is spuriously reported
    # simply ignore
end try

  • наконец, на OSX просто использовать launch команда (хотя это не сработало для OP, возможно, из-за работы над
 launch application ":path:to:applescript:apps:shell-script-launcher.app"

но это не рекомендуется по двум причинам:

  • в OSX 10.10 Apple исправила launch поведение больше не выполняется, поэтому ваш код сломается при запуске там.
  • в то время как приложения без AppleScript обычно запускаются (скрыты) при вызове с помощью launch на информация этот AppleScript "не отправляет команду запуска" и " позволяет открывать приложение без выполнение обычных процедур запуска, таких как открытие нового окна" - что именно это означает, неясно, и разные приложения, похоже, обрабатывают это по-разному.

Applescript имеет команду "запустить скрипт". Он работает на applescripts или applescript приложений. Поэтому, если у меня есть ваше приложение на моем рабочем столе, это работает...

set appPath to (path to desktop as text) & "shell-script-launcher.app"
run script file appPath

ты пробовал открыть?

do shell script "open 'path/to/applescript/apps/shell-script-launcher.app' && say starting script"

поместите его между ключевыми словами "try".

try
tell application ":path:to:applescript:apps:shell-script-launcher.app" to activate
end try

сохраните скрипт как приложение. Добавьте нужный скрипт в папку Script (см. путь ниже)

выполнить следующим образом, измените тип сценария, который вы хотите запустить...

property theApplicationPath : the path to me as text <br/>
property theShellScriptPath : theApplicationPath & "Contents:Resources:Scripts:test.command"<br/>
property theShellScript : the quoted form of POSIX path of theShellScriptPath<br/>
<br/>
tell application "Terminal" to (do shell script "/bin/bash " & theShellScript)
<br/>

Это довольно просто, вы просто должны использовать обычный do shell script, например:

do shell script "open " & ¬
    quoted form of POSIX path of ¬
    alias ":path:to:applescript:apps:shell-script-launcher.app"

Это может быть полезно, но я не эксперт по этому вопросу. Я в этом случае я нашел поведение двойного запуска (на Yosemite, я не использовал никакой другой версии OS X) очень раздражает и копается, я нашел, что можно проверить, если он уже работает.

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

if application "Terminal" is running then
    tell application "Terminal"
        activate
        do script ""
    end tell
else
    tell application "Terminal" to activate
end if