AppleScript против Bash сценария?

13

Я давний «опытный пользователь» Windows и разработчик, который недавно решил перейти на Mac OS X.

На OS X Lion и на самом деле предыдущих версиях, кажется, есть два основных варианта для сценариев и автоматизации в OS X: AppleScript и сценарий Bash. Последнее, конечно, является прямым следствием того, что OS X использует оболочку «bash» Unix, тогда как первая является собственной инновацией Apple. Синтаксис явно различен, в AppleScript используется стиль псевдо-естественного языка.

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

нолдорин
источник
Если у вас есть задачи, относящиеся к файлам и папкам, купите «Hazel», это действительно мощный инструмент на основе правил, который очень полезен. Он также может запускать сценарии оболочки и Applescripts на основе правил.
Стюарт Вудворд

Ответы:

17

И shell-, и 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, где вы можете использовать либо shell-, либо AppleScripting (или оба) вместе с предварительно собранными модулями из различных установленных вами приложений.

Cajunluke
источник
Благодарность; это очень информативный обзор. Есть ли у вас какие-либо рекомендации для хороших учебных ресурсов по возможностям AppleScript? (Сценарий Bash тоже, хотя я сам мог бы легко их найти.)
Noldorin
3
AppleScript имеет (несколько заслуженную) репутацию только для чтения; Сценарии оболочки иногда склоняются к концу спектра, доступному только для записи.
Даниил
@ Noldorin Я купил книгу для изучения AppleScript, но я, как правило, сначала использую Google, а затем индекс книги, когда пытаюсь запомнить синтаксис конкретной команды.
Cajunluke
@CajunLuke: Ах, достаточно справедливо. Как вы узнали AppleScript в первый раз, хотя ??
Нолдорин
@Noldorin Довольно много проб и ошибок и Google. Гуглу сложно найти некоторые вещи, поэтому я купил эту книгу.
Cajunluke
8

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

Оба языка сценариев являются «склеивающими» языками - они могут делать минимальные вещи сами и вместо этого выполнять большинство своих задач, используя возможности других программ. Сценарии оболочки используют каналы Unix, в то время как AppleScript имеет tell applicationсинтаксис.

Они расходятся в том, что сценарии AppleScripts напрямую взаимодействуют со сценариями приложений (почти всегда приложениями с графическим интерфейсом), в то время как сценарии оболочки взаимодействуют главным образом с программами командной строки (некоторые из которых могут вызывать графические пользовательские интерфейсы, но многие этого не делают).

Когда дело доходит до задач управления файлами, оба подхода могут работать. Можно Tell Application Finderскопировать файлы или выполнить cpкоманду в сценарии оболочки. Так зачем использовать один над другим? Конечно, некоторые авторы сценариев лучше знакомы с одним языком, чем с другим, и поэтому предпочитают использовать этот инструмент. Но лучше рассмотреть пользователя сценария. AppleScript часто можно вызвать из графического интерфейса Mac: дважды щелкнув приложение AppleScript, или перетащив файлы в одно из них, или используя меню AppleScript либо в масштабе всей системы, либо в рамках определенной программы. Такие программы, как Mail, могут быть настроены на запуск AppleScript для входящих сообщений для их фильтрации. Для пользователей, привыкших использовать Mac «в стиле Mac» (например, из GUI), сценарии AppleScripts часто более доступны.

Сценарии оболочки часто (но не всегда) живут в Терминале. Если вы уже используете Terminal, запуск сценария оболочки может быть более удобным, чем вызов AppleScript. С другой стороны, многие пользователи вынуждены вводить команды в окне терминала или даже щелкать файл скрипта, который открывает окно терминала, чтобы творить чудеса. Лично я нахожу синтаксис сценариев оболочки более читабельным, чем синтаксис AppleScripts, но я подозреваю, что в этом я нахожусь в меньшинстве. Сценарии оболочек являются привычными для пользователей различных Unix-подобных систем.

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

Даниэль
источник
Спасибо; это, безусловно, проясняет вопрос и подтверждает некоторые мои подозрения.
Нолдорин
Я предполагаю, что Tell Application Finderдля копирования файлов откроется окно с видимым индикатором выполнения, а cpпока нет. Это правильно?
TRiG
4

Другие ответы дают отличные общие сведения о намерениях, стоящих за этими двумя методами написания сценариев. Может быть, я просто приведу вам примеры того, как я их использую.

С помощью Applescript я разработал правила обработки для Mail, подключил BBEdit к R для статистической обработки, создал сложные действия с папками и произвел масштабную реорганизацию своих фотографий в iPhoto и Aperture. Я также создал мини-приложения с кнопками и текстовыми дисплеями. По сути, это автоматическое управление сложными приложениями с помощью графического интерфейса.

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

Иногда я вызываю скрипты Bash изнутри Applescript, обычно для целей обработки текста (GREP) или для легкой загрузки веб-сайтов (скручивание). Я почти всегда использую эту технику, чтобы получить немного данных или переменную для дальнейшего использования в моем Applescript.

ясень
источник
Ах, эти конкретные примеры довольно полезны. Спасибо за это. Кстати, есть ли у вас какие-либо учебные ресурсы для AppleScript? Для полного новичка. (В прошлом я использовал небольшой сценарий Bash и, возможно, смогу переучить его сам.)
Noldorin
2
Да, книга, которая принесла мне наибольшую пользу, была "AppleScript: Полное руководство" Мэтта Нойберга. Документация разработчика Apple в порядке, и ее стоит проконсультировать для справки, но книга Нойберга довольно честно оценивает как сильные, так и слабые стороны языка. Вы обнаружите, что требование Applescript к «естественной» грамматике не очень естественно, и во многих случаях будет нелогичным. Нойберг уточняет, когда это происходит и почему.
Пепел
Это именно то впечатление, которое я получил от первого взгляда на язык. Этот полпути между машиной и естественными языками кажется довольно неловким. Приветствия за рекомендацию!
Нолдорин
3

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

LHF
источник