Як змусити існуючий файл AppleScript працювати як послуга?


11

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

Відповіді:


9

Так, Автоматизатор - найкращий варіант тут. Для створення послуги виконайте наступні дії:

  1. Відкрийте Automator і виберіть Сервіс:

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

  2. Знайдіть "applescript" та перетягніть дію на праву панель:

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

  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файлу, обмеження та два обхідні шляхи.
1313

Я щойно це зробив. Це спрацювало; але зараз для запуску сценарію потрібно 4–5 секунд. (Коли код було збережено безпосередньо в робочому процесі, він запустився майже відразу.) Будь-яке уявлення, що це викликає, або як змусити його запустити швидше?
Зак

1
@Zack Дякую, я не знаю, чому osascriptдля виконання вашого сценарію потрібні 4 додаткові секунди, але Automator не є причиною затримки, яка викликала мою стурбованість. Ви можете налагоджувати osascriptсм opensourcehacker.com/2011/12/02 / ... і stackoverflow.com/questions/31045575 / ...
Жауме

4

У сценарій додайте on runаргумент:

on run
    -- do whatever the script does
end run

Тоді ви можете використовувати автоматизатор "Запустити скрипт оболонки" з osascriptкомандою:

osascript /path/to/script.scpt

osascriptце команда, яка виконує AppleScript в оболонці. Вам потрібні рядки в сценарії, щоб дозволити виконання сценарію поза редактором AppleScript.


1
Вам не потрібно включати явний обробник запуску. Усі сценарії мають неявний обробник запуску. Причина, через яку дія LinuxScript запускає Automator, включає явний обробник запуску, може бути тому, що Automator використовує спеціальну on run {input, arguments}форму, але навіть в Automator ви можете просто видалити обробник запуску.
Лрі

1
@ ͏͏͏ Мені цікаво, чи потрапить вам цей пінг. Кудо на вибір креативного імені.
bmike

3

Можливо, ви захочете поглянути на цю службу , яка дозволяє "створювати служби Mac OS X з будь-якого сценарію".


1
Чи можете ви надати тут відповідь, а не просто посилання
user151019

2

Я б не рекомендував створювати служби Automator для призначення ярликів скриптам. Існує помилка в 10.7 та 10.8, де комбінації клавіш для сервісів Автоматизатора не завжди працюють, доки не наведіть курсор миші на сервіси на панелі меню. Існує також відносно велика затримка (можливо, від 0,1 до 1 с) перед запуском послуг.

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


Я ніколи не відчував такої потреби в парі? Чи є у вас більше подробиць того, про що ви говорите
markhunte

1
Я не впевнений, чи впливає це на всі установки OS X або всі сервіси, але я натрапляв на нього кілька разів на різних установках, і це згадували інші люди тут і в Super User. Іноді комбінації клавіш для всіх служб Автоматизатора перестають працювати (або нічого не відбувається, якщо натиснути на них), але вони знову почнуть працювати, якщо навести курсор миші на сервісне меню на панелі меню, або якщо ви, наприклад, вибрали одну службу мишкою.
Лрі

2

Ви можете запустити існуючий сценарій за допомогою такої простої служби автоматизації. І призначте ярлик із клавіатурних скорочень як звичайних. Просто пам’ятайте, що деякі програми можуть знадобитися перезапустити, перш ніж вони вибирають ярлики.

приклад.

Скажіть, привіт:

say "hello"

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

Що в цьому прикладі використовує:

  • Немає даних
  • Будь-яка програма.

Дія - це сценарій запуску оболонки . Код просто використовує команду osascript команди Unix та шлях до файлу. Вхід передачі може бути stdn або аргументом

Це нічого особливого не потрібно робити сценарію.

Більш детальну інформацію про команду osascript дивіться на сторінках, що входять до неї. На сторінці man подано ще один приклад, коли ви можете передавати аргументи до сценарію.


0

Щоб розробити Службу, вам потрібне якесь програмне забезпечення, яке створить Сервіс, наприклад, одне з наступних:

  1. Автоматизатор для створення .workflow
  2. Цяпослуга для створення .service
  3. Xcode для створення .app

Усі перераховані вище види послуг є пакетами. Всі вони папки, які містять список, який визначає атрибути Сервісу.

Ось як я створив Сервіс за допомогою Automator, який використовує дію Автоматизатора "Запустити AppleScript" для виклику існуючого .script.

Служба автоматизації, яка викликає існуючий AppleScript

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.