Сценарій AppleScript проти Bash?


13

Я давній "енергетичний користувач" Windows і розробник, який нещодавно вирішив перейти на Mac OS X.

Для OS X Lion та дійсно попередніх версій, здається, є два основні варіанти сценаріїв та автоматизації в OS X: AppleScript та Bash script. Останнє, звичайно, є прямим наслідком OS X за допомогою оболонки Unix "bash", тоді як перша - власне нововведення Apple. Синтаксиси явно сильно відрізняються: AppleScript має псевдонатуральний стиль мови.

Моє запитання: чи часто використовуються сценарії AppleScript і Bash (дійсно, чи слід їх використовувати) для різних завдань і цілей в OS X. Я не знаю, що існує широкий спектр завдань, які я можу виконувати за допомогою сценарію Bash, хоча, звичайно, код для деяких більш просунутих вони можуть швидко заплутатися. Чи мають ці дві мови перекриваються або майже однакові випадки використання, незважаючи на пізніший винахід AppleScript від Apple - чи вони призначені для використання у різних сценаріях? Оцінка високого рівня, а також деякі конкретні приклади були б вдячні.


Якщо у вас є завдання, що стосуються файлів і папок, купуйте "Hazel", це дійсно потужний інструмент на основі правил, який дуже корисний. Він також може висувати сценарії оболонки та Applescripts на основі правил.
Стюарт Вудвард

Відповіді:


17

Як оболонки, так і AppleScripts можна використовувати майже де завгодно, будь-коли є відповідним.

AppleScripts працюють краще під час розмови з додатками та системними засобами на рівні користувача. (Наприклад, ви можете сказати, tell app "iTunes" to playі це буде, або tell app "Finder" to open the first file of the second window.)

Сценарії оболонки (ви згадували bash) краще працюють під час розмови з системними об'єктами низького рівня та предметами Unixy.

Вони обоє сумісні: ви можете викликати команду оболонки з AppleScript за допомогою, do shell script "command here"а також можете викликати код AppleScript з оболонки osascript -e "AppleScript". Крім того, між ними є досить багато перекриттів (особливо якщо мова йде про операції з файловою системою).

Звичайно, в Інтернеті є більше ресурсів для вивчення сценаріїв оболонок, ніж AppleScript, і це не допомагає, що AppleScript має репутацію мови "лише для читання" (тобто важче писати, ніж читати).

У будь-якому випадку, найсучасніший спосіб зробити сценарій - це Automator, де ви можете використовувати або оболонку, або AppleScripting (або обидва) разом з попередньо вбудованими модулями з різних встановлених вами додатків.


Спасибі; це дуже інформативний огляд. Чи є якісь рекомендації щодо гарних навчальних ресурсів на рівні AppleScript? (Сценарій Баша теж, хоча, ймовірно, я міг би знайти їх досить легко.)
Нолдорін

3
AppleScript має (дещо зароблену) репутацію лише для читання; Сценарії оболонок іноді схиляються до кінця спектра "лише для запису".
Даниїл

@Noldorin Я купив книгу, щоб вивчити AppleScript, але я схильний використовувати Google в першу чергу і індекс книги, коли я намагаюся запам'ятати синтаксис певної команди.
Cajunluke

@CajunLuke: Ах, досить справедливо. Як ви вперше вивчили AppleScript ??
Нолдорін

@Noldorin Досить багато спроб та помилок та Google. Для Google деякі речі важкі, тому я купив книгу.
Cajunluke

8

Хоча будь-який контекст сценаріїв може робити все, що може бути іншим (оскільки сценарії оболонки можуть викликати /usr/bin/osascriptзапуск AppleScript, а AppleScript має do shell scriptкоманду), дійсно є контексти, для яких один краще підходить, ніж інший.

Обидві мови сценаріїв - це "склеювати" мови - вони можуть робити мінімальні речі самостійно, а замість цього виконувати більшість своїх завдань, використовуючи можливості інших програм. Сценарії оболонки використовують протоколи Unix, тоді як у AppleScript є tell applicationсинтаксис.

Там, де вони розходяться, є те, що AppleScripts безпосередньо спілкуються із програмами для написання сценарію (майже завжди програми GUI), в той час як сценарії оболонки спілкуються в основному з програмами командного рядка (деякі з яких можуть викликати графічний інтерфейс користувача, але багато хто не робить).

Що стосується завдань управління файлами, обидва підходи можуть працювати. Можна Tell Application Finderкопіювати файли або виконувати cpкоманду в сценарії оболонки. То навіщо використовувати один над іншим? Звичайно, деякі сценаристи більше знайомі з однією мовою, ніж інші, і тому вважають за краще використовувати цей інструмент. Але краще розглянемо користувача сценарію. AppleScript часто можна викликати в інтерфейсі Mac GUI: двічі клацнувши додаток AppleScript або перенести файли на одне або за допомогою меню AppleScript або на всій системі, або в межах певної програми. Такі програми, як Mail, можна налаштувати для запуску AppleScript на вхідні повідомлення для їх фільтрації. Для користувачів, які звикли використовувати Macs таким чином, як "Mac" (тобто від GUI), AppleScripts часто є більш доступними.

Сценарії оболонок часто (але не завжди) живуть у Терміналі. Якщо ви вже використовуєте термінал, запуск сценарію оболонки може бути зручнішим, ніж виклик AppleScript. З іншого боку, багато користувачів перестають вводити команди у вікні терміналу або навіть натискаючи файл сценарію, який відкриває вікно терміналу, щоб зробити свою магію. Мені особисто здається, що синтаксис скриптів оболонки є більш читабельним, ніж у AppleScripts, але я підозрюю, що в цьому меншості. Сценарії оболонок є звичними для користувачів різних Unix-подібних систем.

У будь-якому випадку обидва є потужним інструментом для отримання кращого контролю над вашим Mac.


Дякую; це, безумовно, прояснює питання і підтверджує деякі мої підозри.
Нолдорін

Я здогадуюсь, що Tell Application Finderдля копіювання файлів відкриється вікно з видимою смужкою прогресу, але cpне буде. Це так?
TRiG

4

Інші відповіді дають чудові огляди намірів, що стоять за цими двома сценаріями. Можливо, я просто наведу вам приклади того, як я ними користуюся.

Завдяки Applescript я створив правила обробки пошти, підключив BBEdit до R для статистичної обробки, створив складні дії з папками та здійснив масштабну часову реорганізацію своїх фотографій в iPhoto та Aperture. Я також створив міні-програми з кнопками та текстовими дисплеями. В основному це автоматична маніпуляція складних додатків з графічним інтерфейсом.

За допомогою сценаріїв Bash я створив підпрограми автоматичної обробки зображень за допомогою Imagemagick, підпрограми обробки PDF з Ghostscript, підпрограми часу та дати та багато обробки тексту за допомогою Bash, sed / awk та Perl. Утиліти Unix, як правило, легкі, швидкі та гнучкі, а Bash - це чудовий спосіб поєднати їх у дуже потужні, прості інструменти.

Іноді я закликаю Bash-скрипти зсередини Applescript, як правило, для обробки тексту (GREP) або для легкого вибору веб-сайту (curl). Я майже завжди використовую цю техніку, щоб отримати трохи даних або змінної для подальшого використання в моєму Applescript.


А, ці конкретні приклади досить корисні. Дякую за це Чи є у вас якісь запропоновані навчальні ресурси для AppleScript? Для повного новачка. (Раніше я використовував трохи сценарію Баша і, ймовірно, міг сам його переучити.)
Нолдорін,

2
Так, книга, від якої я отримала найбільше користь, - це "AppleScript: Постійний посібник" Метта Нойберга. Документація для розробників Apple в порядку, і варто порадитись для довідки, але книга Нойберга цілком чесно оцінює як сильні, так і слабкі сторони мови. Ви побачите, що наполягання Applescript на "природній" граматиці не дуже природно, і в багатьох випадках буде контрінтуїтивним. Нойберг уточнює, коли це відбувається і чому.
Еш

Саме таке враження я склав від спочатку перегляду мови. Цей будинок на півдорозі між машиною та природними мовами здається досить незручним. Ура за рекомендацію!
Нолдорін

3

Це може бути надмірним спрощенням, але сценарій оболонки призначений для комбінування існуючих програм для виконання нових завдань, тоді як AppleScript - керування (в основному графічним інтерфейсом) програмами віддалено. Класичні програми Unix, як правило, зчитують деякий вхід і створюють певний сценарій виводу та оболонки, що дозволяє комбінувати їх. AppleScript призначений для автоматизації програм GUI.

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