Я давний «опытный пользователь» Windows и разработчик, который недавно решил перейти на Mac OS X.
На OS X Lion и на самом деле предыдущих версиях, кажется, есть два основных варианта для сценариев и автоматизации в OS X: AppleScript и сценарий Bash. Последнее, конечно, является прямым следствием того, что OS X использует оболочку «bash» Unix, тогда как первая является собственной инновацией Apple. Синтаксис явно различен, в AppleScript используется стиль псевдо-естественного языка.
Мой вопрос заключается в том, широко ли используются сценарии AppleScript и Bash (действительно, если они будут использоваться) для несопоставимых задач и целей в OS X. Я смутно осведомлен о широком спектре задач, которые можно выполнить с помощью сценария Bash, хотя, конечно, код для некоторых более продвинутых можно быстро запутаться. Имеют ли эти два языка перекрывающиеся или почти идентичные варианты использования, несмотря на более позднее изобретение Apple AppleScript, или они предназначены для использования с различными сценариями? Обзор высокого уровня, а также некоторые конкретные примеры будут оценены.
источник
Ответы:
И 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 (или оба) вместе с предварительно собранными модулями из различных установленных вами приложений.
источник
Хотя любой контекст сценария может делать все, что может другой (поскольку сценарии оболочки могут
/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
пока нет. Это правильно?Другие ответы дают отличные общие сведения о намерениях, стоящих за этими двумя методами написания сценариев. Может быть, я просто приведу вам примеры того, как я их использую.
С помощью Applescript я разработал правила обработки для Mail, подключил BBEdit к R для статистической обработки, создал сложные действия с папками и произвел масштабную реорганизацию своих фотографий в iPhoto и Aperture. Я также создал мини-приложения с кнопками и текстовыми дисплеями. По сути, это автоматическое управление сложными приложениями с помощью графического интерфейса.
С помощью сценариев Bash я создал процедуры автоматической обработки изображений с помощью Imagemagick, процедуры обработки PDF с Ghostscript, процедуры с датами и временем, а также множество обработчиков текста с помощью Bash, sed / awk и Perl. Утилиты Unix обычно бывают бережливыми, быстрыми и гибкими, и Bash - отличный способ объединить их в очень мощные и простые инструменты.
Иногда я вызываю скрипты Bash изнутри Applescript, обычно для целей обработки текста (GREP) или для легкой загрузки веб-сайтов (скручивание). Я почти всегда использую эту технику, чтобы получить немного данных или переменную для дальнейшего использования в моем Applescript.
источник
Это может быть упрощением, но сценарии оболочки предназначены для объединения существующих программ для выполнения новых задач, тогда как AppleScript предназначен для удаленного управления приложениями (в основном с графическим интерфейсом). Классические Unix-программы обычно читают некоторые входные данные и производят некоторые выходные данные, а сценарии оболочки позволяют комбинировать их. AppleScript предназначен для автоматизации приложений с графическим интерфейсом.
источник