Как запустить приложение 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"
нужный вариант:
- запустить " launcher.помощью AppleScript" с помощью AppleScript редактор
- слушайте "запуск сценария"
фактическое поведение:
- запуск программы "shell-script-launcher".app", открыв его вручную в finder, дает ожидаемые результаты поведение
- запуск " 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 может возвращать объекты непосредственно вызывающему абоненту:
- запустить на основе AppleScript app: лучше всего использовать
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