- Автоматизация задач на Mac с помощью AppleScript и Терминала
- Просмотр словаря AppleScript для Терминала
- Запуск скриптов AppleScript с помощью Терминала
- Applescript: язык автоматизации для macOS
- Диалоги с пользователем
- Диалоги с софтом
- Командная строка
- О shell-скриптах в команде «Терминал» на Mac
- Создание программ для Mac OS X. Часть 3: Apple Script
- Язык, очень похожий на натуральный
Автоматизация задач на Mac с помощью AppleScript и Терминала
С помощью скриптов AppleScript можно ускорить работу с Терминалом и автоматизировать часто выполняемые задачи. Приложение «Терминал» поддерживает сценарии и команды AppleScript. Эти команды описаны в словаре AppleScript для Терминала.
Просмотр словаря AppleScript для Терминала
В Finder на Mac откройте папку «Программы/Утилиты».
Перетяните значок Терминала на значок Редактора скриптов
.
В AppleScript можно использовать команду Do Shell Script для отправки команды сценария UNIX shell в Терминал.
Запуск скриптов AppleScript с помощью Терминала
Из Терминала можно запускать скрипты AppleScript, используя команду osascript.
В приложении «Терминал» на Mac можно ввести команду cd для перехода к каталогу, содержащему файл, который Вы хотите запустить. Например:
Введите команду osascript. Например:
Источник
Applescript: язык автоматизации для macOS
AppleScript — скриптовый язык, который используется для управления системой, приложениями и файлами в Mac OS X. Наиболее общий принцип применения следующий: открыть приложение и передать ему набор инструкций для выполнения. Причем это не обязательно приложения из стандартного комплекта поставки операционки, многие сторонние приложения также предоставляют API для обращения к ним через AppleScript.
Для редактирования и запуска скриптов есть небольшой редактор, который находится в Application > Utilites > AppleScript Edtior. Редактор довольно минималистичный и не имеет богатых возможностей, но для написания небольших скриптов его обычно оказывается вполне достаточно. Условно его можно разделить на две части: в первой пишется непосредственно сам код, а в нижней части, показывается результат выполнения твоих трудов. Если вдруг возникнет необходимость сделать более или менее серьезный проект, то удобнее будет воспользоваться какой-нибудь сторонней разработкой, например Script Debugger.
Applescript имеет очень простой синтаксис, который был максимально приближен к обычному английскому языку, давай быстро пробежимся по основным операторам, чтобы понимать, как нам выполнять самые базовые вещи.
Чтобы задать переменную нужно воспользоваться оператором set. Делается это так:
Имя переменной не должно совпадать с зарезервированными словами (beep, say и т.д.), а также нельзя начинать имя переменной с цифры.
Условия задаются при помощи оператора if, как и в других языках:
Оператор say произносит переданный ему текст. Вместо «is» можно писать привычный знак равенства.
Задать цикл можно оператором repeat. В самом простом случае достаточно написать:
Этот цикл 2 раза воспроизведет стандартный системный звук. Если нужны итерационные циклы, то их можно задать используя until или while, например:
Арифметический цикл можно задать при помощи with таким образом:
Я думаю, понятно, что этот код будет произносить числа от 1 до 20 с шагом 2. Сейчас я быстро прошелся по основным «школьным» азам, чтобы было понятно что это за язык и с чем его едят. Как видишь, разработчики старались делать его таким, чтобы пользователи с разным уровнем подготовки могли «говорить» с компьютером практически человеческим языком. Я не буду подробно останавливаться на всех особенностях синтаксиса, если возникнут вопросы, ты всегда сможешь найти ответы в документации на сайте Apple.
Диалоги с пользователем
AppleScript не был бы так интересен, если бы не возможность легко создавать различные диалоговые окна, что дает нам возможность сделать наши скрипты более user-friendly.
Давай начнем с вызова стандартного системного диалога выбора файла. Делается это при помощи команды choose file.
В данном примере, будет вызван диалог выбора файла в котором включена фильтрация по типу (pdf или mobi) и разрешен выбор нескольких файлов. Если ты выполнишь этот код, то заметишь, что путь к файлу запишется, как alias:
Такой формат понимают стандартные приложения в Mac OS, но часто требуется использовать привычный нам POSIX-вид, делается это легко:
В переменную posixFilePath путь запишется в виде: /Users/UserName/file.pdf.
Аналогичным способом выбирается папка при помощи choose folder. Чтобы показать свое, кастомное сообщение пользователю, нужно воспользоваться командой:
Если не было передано никаких параметров, то будет выведен стандартный диалог с кнопками «ОК» и «Cancel». Тут стоит отметить, что после вывода диалога скрипт приостановит выполнение, и продолжит выполняться после нажатия «ОК», а вот после «Cancel» выполнение скрипта будет прервано с соответствующей ошибкой «User canceled.». Если такое поведение в твои планы не входит, то самое простое, — воспользоваться обработчиком ошибок:
Естественно, может такое случиться, что потребуются другие кнопки, кроме «Cancel» и «OK», и ты конечно же волен добавить любые, которые захочешь (но не больше трех). Делается это следующим образом:
А как быть, если требуется дать пользователю выбрать что-нибудь из списка? Легко:
В случае если нужно будет просто ввести какие-либо данные воспользуйся такой строчкой:
Диалоги с софтом
Как я отметил в начале, главным козырем AppleScript является возможность автоматизации действий в различных приложениях, что дает практически безграничные возможности по его применению. Для того чтобы передать команду приложением нужно воспользоваться блоком tell .
Например, очистим корзину:
Чтобы узнать какие действия доступны для того или иного приложения, в AppleScript имеется средство, которое называется Dictionary, оно доступно в меню File > Open dictionary.
Также имеется возможность передачи команд на удаленный компьютер. Для начала, нужно включить опцию Remote Apple Events на машине, где требуется выполнить какие-либо действия в System Preferences > Sharing. Теперь, чтобы выполнить код на другой машине, нужно использовать следующую конструкцию:
Будь готов, что для выполнения действия на удаленной машине скрипт запросит логин и пароль, так что если ты потираешь руки, чтобы творить беспредел, придется придумать что-то еще :).
Командная строка
После прочтения предыдущих двух разделов у тебя наверняка должна была зародиться мысль о том, что неплохо было бы соединить удобство AppleScript с мощью shell-скриптов. Первое, что приходит в голову, — воспользоваться знаниями из предыдущего раздела и скормить необходимые команды приложению Terminal.
Такой способ имеет право на существование и в отдельных случаях он может быть даже предпочтительнее, но есть другой вариант: воспользоваться командой do shell script, при помощи которой можно также выполнять консольные команды, что гораздо более удобно, так как дает возможность записать результат выполнения команды в переменную и оперировать с ней дальше средствами AppleScript.
Источник
О shell-скриптах в команде «Терминал» на Mac
Вместо ввода команд и ожидания ответа Вы можете составить shell-скрипт, который будет выполняться без Вашего непосредственного участия.
Shell-скрипт — это текстовый файл, который содержит одну или несколько команд UNIX. Вместо того чтобы вручную поочередно вводить команды в командной строке, Вы запускаете shell-скрипт, который выполняет все эти команды.
Плюс в том, что в одном shell-скрипте можно объединить большое количество стандартных задач. Это обеспечивает экономию Вашего времени и сокращает количество возможных ошибок при многократном выполнении однотипных задач. Кроме того, shell-скрипты можно автоматизировать с помощью таких инструментов, как launchd или Apple Remote Desktop.
Shell-скрипт начинается с комбинации символов, которая сообщает, что это shell-скрипт. Это символы # и ! (вместе называемые shebang), после которых указывается оболочка shell, в которой должен быть выполнен скрипт. Например, вот первая строка shell-скрипта, который будет запущен в sh :
Рекомендуется снабжать shell-скрипты комментариями. Чтобы добавить комментарий, начните строку со знака номера (#). Каждая строка комментария должна начинаться со знака номера:
Чтобы визуально отделить различные части shell-скрипта, в него можно добавлять пустые строки.
С помощью инструмента chmod можно указать, что файл является исполняемым (то есть, его содержимое может быть запущено как приложение). См. раздел Преобразование файлов в исполняемые в Терминале.
Инструкции по написанию shell-скриптов см. в статье Основные сведения о shell-скриптах на веб‑сайте Apple для разработчиков.
Источник
Создание программ для Mac OS X. Часть 3: Apple Script
В этой части я расскажу про еще одно интересное средство разработки приложений для Mac OS X — скриптового языка Apple Script.
Apple Script разрабатывался чтобы применяться конечными пользователями, а не программистами, и позволить им контролировать приложения и документы, с которыми они работают. Например, с помощью Apple Script можно открыть фотографию в редакторе изображений, обрезать до нужного размера, записать ссылку на фото в текстовый файл и т.п.
В отличии от того, как пользователь через GUI взаимодействует с приложением, например впечатывает информацию в текстовые поля приложения для работы с базами данных, AppleScript работает совсем иначе, скрипт использует внутреннюю объектную модель приложения, тем самым внося значения в саму базу данных. Это означает, что во время работы скрипта приложение даже не обязательно показывать. Естественно такая модель работы требует того, чтобы ваше приложение было написано с поддержкой Apple Script.
Каждое приложение, которое понимает Apple Script, публикует поддерживаемые комманды в Apple Event словаре, который используется, чтобы определить допустимые комманды.
Язык, очень похожий на натуральный
в подкасте Радио-Т ведущий bobuk говорил что скрипт, написанный на языке Apple Script читается как обычный английский текст. В принцие он прав, т.к. это и есть одна из основополагающих особеннойстей Apple Script.
Движок Apple Script комбинирует глаголы и существительные, чтобы выполнить действия. Например, чтобы напечатать документ, страницу из документа или опеределенный фрагмент, вместо вызова функций printPage, printDocument, printRange, мы берем глагол print и добавляем нужное существительное:
print page 1
print document 2
print pages 1 thru 5 of document 2
tell application «iTunes»
playpause
end tell
tell application «Microsoft Word» to quit
tell application «QuarkXPress»
tell document 1
tell page 2
tell text box 1
set word 5 to «Apple»
end tell
end tell
end tell
end tell
Использовать иерархичность можно следующим образом:
pixel 7 of row 3 of TIFF image «my bitmap»
set pix to 72
set answer to text returned of (display dialog «Enter in the number of inches» default answer «1»)
display dialog answer & «in = » & (answer * pix) & «px»
при исполнии покажет диалоговое окно с запросом ввода кол-ва дюймов, потом это значение конвертируется в пиксели и результат показывается в следующем окне.
Также скрипт можно сохранить чтобы в дальнейшем использовать как полноценное приложение. Обработчик события запуска должен находиться внутри следующей конструкции:
В принципе, его можно и не писать, тогда при запуске обработка скрипта начнется с первой строки в файле.
Если бросить на файл со скриптом пару других файлов, то при запуске будет использован следующий обработчик:
on open theItems
— что-нибудь делаем с этими самыми theItems
end open
Средстав для написания скриптов лежат в /Applications/AppleScript
В качестве редактора/интерпритатора исаользуется ScriptEditor.app
Чтобы открыть Apple Event словарь надо в меню Script Editor нажать File=> Open Dictionary, откроется окно со списком приложений
выбираем нужное(например iTunes) и клацаем OK. Открылось окно с описанием комманд для нужного нам приложения
А теперь напишем простенькое Cocoa приложение, с помощью которого можно контроллировать iTunes
Открываем XCode, File=>New Project, Cocoa Application => в Project Name пишем iTunes_Controller. Добавляем новый Objective-C class «controller». В файле controller.h пишем
interface controller: NSObject <
>
— (IBAction) nextClick:(id)sender;
— (IBAction) prevClick:(id)sender;
— (IBAction) pauseClick:(id)sender;
— (IBAction) playClick:(id)sender;
— (void) executeAppleScript:(NSString*)sctript;
end
В принципе, в этом коде ничего секретно-военного нету. Просто пишем класс, с помощью которого и будем контролировать iTunes. Функции *Click — это обработчики нажатия по соответствующим кнопочкам на форме. А executeAppleScript:(NSString*)sctript — функция, которая будет исполнять скрипт в параметре script.
А теперь клацаем по MainMenu.nib и попадаем в InterfaceBuilder. Добавляем в окно MainMenu.nib новый NSObject и назначем ему класс controller:
Затем разместим на форме четыре кнопки с надписями «next»,«play»,«pause»,«previous» и соеденим их с соотв. обработчиками из класса controller:
Сохраняем все и возвращаемся в XCode. В файле controller.m пишем следующее:
— (void) executeAppleScript:(NSString*)script <
try <
NSAppleScript *ascript = [[NSAppleScript alloc] initWithSource:script];
[ascript executeAndReturnError:nil];
[ascript release];
>
catch (NSException * e) <
NSLog(@«exception:%@»,e);
>
>
— (void) nextClick:(id)sender <
[self executeAppleScript:@«tell application \»iTunes\» \n next track \n end tell»];
>
— (void) prevClick:(id)sender <
[self executeAppleScript:@«tell application \»iTunes\» \n previous track \n end tell»];
>
— (void) playClick:(id)sender <
[self executeAppleScript:@«tell application \»iTunes\» \n play \n end tell»];
>
— (void) pauseClick:(id)sender <
[self executeAppleScript:@«tell application \»iTunes\» \n pause \n end tell»];
>
В принципе в этом коде ничего сложного тоже нет. Единственная интересная вещь — класс NSAppleScript, с помощью объекта которого и выполняем скрипт. Подробнее про NSAppleScript можно почитать здесь.
В принципе, я думаю, что этого достаточно чтобы получить общее представление о Apple Script и попробавть что-нибудь на нем написать.
Источник