Как заставить существующий файл AppleScript работать как сервис?

11

Я сделал AppleScript, сохранил его в виде файла в определенной папке на моем жестком диске. Теперь я хочу назначить ему ярлык и похоже, что я должен создать Сервис через Automator, но он Run AppleScriptпросит меня поместить код внутрь, а я хочу выполнить уже существующий файл .scpt. Как это сделать?

Nakilon
источник

Ответы:

9

Да, Automator - лучший вариант здесь. Чтобы создать сервис, выполните следующие действия:

  1. Откройте Automator и выберите Сервис:

    введите описание изображения здесь

  2. Найдите «applecript» и перетащите действие на правую панель:

    введите описание изображения здесь

  3. Измените Service receives selected textна Service receives no inputтак, чтобы это всегда появлялось в меню Сервисов:

    введите описание изображения здесь

  4. Заменить (* Your script goes here *)на:

    do shell script "/usr/bin/osascript /path/to/your/script.scpt"

    если вы хотите выполнить существующий .scptфайл. Обратите внимание, что osascript не может обрабатывать взаимодействие с пользователем, например отображение диалогового окна:

    введите описание изображения здесь

    Чтобы преодолеть это ограничение, используйте этот обходной путь или просто замените (* Your script goes here *)его содержимым.

  5. Сохрани это:

    введите описание изображения здесь

  6. Если вы хотите, вы можете назначить ярлык для вашего нового сервиса. Выберите «Службы»> «Настройки служб» в Finder (или в любом открытом приложении):

    введите описание изображения здесь

  7. Назначьте не очень распространенное сокращение:

    введите описание изображения здесь

  8. Теперь ваш сервис доступен из любого приложения через ярлык, назначенный на предыдущем шаге:

    введите описание изображения здесь

Если вы когда-нибудь захотите избавиться от открытого сервиса ~/Library/Services, удалите сервис и очистите корзину:

введите описание изображения здесь

Жауме
источник
Я сказал, что хочу выполнить существующий файл сценария, чтобы не записывать его снова в Automator.
Накилон
Я думал, что копирование / вставка будет в порядке, но да, вы правы, это четко указано в вашем вопросе. Используйте osascript, как объяснено в других ответах.
Jaume
@Nakilon Я добавил, как использовать osascriptв Automator для запуска вашего .scptфайла, ограничение и два обходных пути.
Jaume
Я только что сделал это. Это сработало; но теперь запуск сценария занимает от 4 до 5 секунд. (Когда код был сохранен непосредственно в рабочем процессе, он запускался почти сразу.) Есть идеи, что вызывает это, или как заставить его запускаться быстрее?
Зак
1
@ Zack Спасибо, я не знаю, почему osascriptнужно 4 дополнительных секунды для выполнения вашего скрипта, но Automator не является причиной задержки, которая была моей заботой. Вы можете отлаживать osascript, см. Opensourcehacker.com/2011/12/02/… и stackoverflow.com/questions/31045575/…
jaume
4

В сценарии добавьте on runаргумент:

on run
    -- do whatever the script does
end run

Затем вы можете использовать действие Automator «Run Shell Script» с osascriptкомандой:

osascript /path/to/script.scpt

osascriptэто команда, которая выполняет AppleScript в оболочке Вам нужны строки в скрипте, чтобы скрипт мог выполняться вне редактора AppleScript.

alexwlchan
источник
1
Вам не нужно включать явный обработчик запуска. Все сценарии имеют неявный обработчик запуска. Причина, по которой в действии Automator запускать AppleScript включает явный обработчик запуска, может заключаться в том, что Automator использует специальную on run {input, arguments}форму, но даже в Automator вы можете просто удалить обработчик запуска.
Lri
1
@ ͏͏͏ Мне интересно, дойдет ли тебе этот пинг? Престижность по выбору творческого имени.
bmike
3

Возможно, вы захотите взглянуть на этот сервис , который позволяет «создавать сервисы Mac OS X из любого скрипта».

Питер
источник
1
Можете ли вы дать ответ здесь, а не просто ссылку
user151019
2

Я бы не рекомендовал создавать службы Automator для назначения ярлыков сценариям. В 10.7 и 10.8 есть ошибка, когда сочетания клавиш для служб Automator не всегда работают, пока вы не наведете курсор мыши на меню служб в строке меню. Существует также относительно длительная (возможно, от 0,1 до 1 с) задержка до запуска служб.

Посмотрите этот ответ о других способах назначения сочетаний клавиш для сценариев. Я использую FastScripts и Альфред сам.

LRI
источник
Я никогда не испытывал этой необходимости парить? есть ли у вас более подробная информация о чем вы говорите
markhunte
1
Я не уверен, влияет ли это на все установки OS X или на все службы, но я сталкивался с этим несколько раз на разных установках, и это упоминалось другими людьми здесь и в Super User. Иногда сочетания клавиш для всех служб Automator перестают работать (или ничего не происходит, если вы нажимаете их), но они снова начинают работать, если вы наводите курсор мыши на меню служб в строке меню или, например, выбираете один сервис мышью.
Lri
2

Вы можете запустить существующий скрипт с помощью простого сервиса автоматизации, подобного этому. И назначьте ярлык из сочетания клавиш как обычно. Просто помните, что некоторые приложения, возможно, потребуется перезапустить, прежде чем они подберут ярлыки.

пример.

сценарий sayHello:

say "hello"

Сервис автоматов: введите описание изображения здесь

Который в этом примере использует:

  • Нет ввода
  • Любое приложение.

Действие - это скрипт запуска оболочки. В коде просто используется команда osascript unix и путь к файлу. Передать ввод можно в stdn или в аргумент

В этом нет ничего особенного, что нужно сделать со сценарием.

Для получения более подробной информации о команде osascript посмотрите справочные страницы по ней. Страница man дает другой пример, где вы можете передать аргументы скрипту.

markhunte
источник
0

Для разработки Сервиса вам необходимо какое-то программное обеспечение, которое будет создавать Сервис, например, одно из следующих:

  1. Automator для создания .workflow
  2. ThisService для создания .service
  3. Xcode для создания .app

Все вышеперечисленные виды услуг являются пакетами. Все они представляют собой папки, которые содержат список, который определяет атрибуты Сервиса.

Вот как я создал Сервис, используя Automator, который использует действие Automator «Запуск AppleScript» для вызова существующего .script.

Служба Automator, которая вызывает существующий AppleScript

Kaydell
источник