AppleScript与Bash脚本?


13

我是Windows的资深用户,也是开发人员,最近决定迁移到Mac OSX。

在OS X Lion和以前的版本上,似乎在OS X中有两个主要的脚本编写和自动化选项:AppleScript和Bash脚本。后者当然是OS X使用Unix“ bash” shell的直接结果,而前者是Apple自己的创新。语法明显不同,AppleScript具有伪自然语言样式。

我的问题是,AppleScript和Bash脚本是否通常用于OS X上的不同任务和目的(实际上,应该使用它们)。我模糊地认识到我可以用Bash脚本完成的大量任务,尽管当然是代码对于一些更高级的产品,很快就会变得令人费解。尽管Apple后来发明了AppleScript,但是这两种语言的使用情况是否重叠或几乎完全相同?或者是否打算在不同情况下使用它们?一个高级概述以及一些特定示例将不胜感激。


如果您有与文件和文件夹有关的任务,请购买“ Hazel”,这是一个非常强大的基于规则的工具,非常有用。它还可以根据规则启动Shell脚本和Applescript。
斯图尔特·伍德沃德

Answers:


17

shell和AppleScript都可以在任何合适的地方使用。

与应用程序和用户级系统设施进行对话时,AppleScripts可以更好地工作。(例如,你可以说tell app "iTunes" to play,它会,或tell app "Finder" to open the first file of the second window)。

在与低级系统对象和Unixy内容进行对话时,Shell脚本(您称为bash)工作得更好。

它们都是可以互操作的:您可以使用从AppleScript调用Shell命令,do shell script "command here"并可以通过从Shell调用AppleScript代码osascript -e "AppleScript"。此外,两者之间有很多重叠(尤其是在文件系统操作方面)。

当然,在线学习shell脚本的资源比AppleScript多,并且AppleScript以“只读”语言(即,比编写起来难于编写)而享有盛誉也无济于事。

无论如何,最现代的脚本编写方法是使用Automator,您可以在其中使用shell脚本或AppleScripting(或两者)以及已安装的各种应用程序中的预构建模块。


谢谢; 这是一个非常有用的概述。您对AppleScript性能方面的良好学习资源有什么建议吗?(Bash脚本也是,尽管我自己可能很容易找到它们。)
Noldorin 2012年

3
AppleScript具有只读性(获得了一些声誉)。Shell脚本有时倾向于频谱的“只写”端。
丹尼尔

@Noldorin我买了一本书来学习AppleScript,但是当我想记住特定命令的语法时,我倾向于首先使用Google,其次是使用本书的索引。
cajunluke 2012年

@CajunLuke:嗯,很公平。您是如何第一次学习AppleScript的?
Noldorin 2012年

@Noldorin几乎是反复试验和Google。Google很难做到某些事情,所以这就是我买书的原因。
Cajunluke 2012年

8

尽管任何一个脚本上下文都可以做其他事情(因为可以调用Shell脚本/usr/bin/osascript来调用AppleScript,而AppleScript具有该do shell script命令),但确实存在一些上下文比另一个更适合的上下文。

两种脚本语言都是“胶水”语言,它们可以自己做最少的事情,而是通过调用其他程序的功能来完成大部分任务。Shell脚本使用Unix管道,而AppleScript具有tell application语法。

它们的不同之处在于AppleScripts直接与可编写脚本的应用程序(几乎总是GUI应用程序)进行通信,而Shell脚本主要与命令行程序进行通信(其中一些可以调用图形用户界面,但许多不能调用图形用户界面)。

当涉及文件管理任务时,两种方法都可以使用。可以Tell Application Finder复制文件,或cp在Shell脚本中运行命令。那么,为什么要使用一个呢?当然,某些脚本编写者比另一种语言更熟悉一种语言,因此更喜欢使用该工具。但是更好的考虑是脚本的用户。通常可以从Mac GUI调用AppleScript:双击AppleScript应用程序,或将文件拖放到其中,或者使用系统范围内或特定程序中的AppleScript菜单。可以将诸如Mail之类的程序设置为在传入消息上运行AppleScript以对其进行过滤。对于习惯于以“类Mac”方式(即从GUI)使用Mac的用户,AppleScripts通常更易于访问。

Shell脚本经常(但不总是)驻留在终端中。如果已经在使用Terminal,则运行Shell脚本比调用AppleScript更为方便。另一方面,由于必须在“终端”窗口中键入命令,或者甚至单击打开“终端”窗口来执行其功能的脚本文件,许多用户对此不满意。我个人认为Shell脚本的语法比AppleScripts更具可读性,但是我怀疑我在其中很少。Shell脚本为许多不同的类Unix系统的用户熟悉。

无论如何,这两种都是强大的工具,可以更好地控制Mac。


谢谢; 这无疑可以澄清问题并证实我的一些怀疑。
Noldorin 2012年

我猜测Tell Application Finder要复制文件会打开一个带有可见进度条的窗口,而cp不会。那正确吗?
TRiG 2014年

4

其他答案给出了这两种脚本技术背后的意图的高级概述。也许我只给你一些我如何使用它们的例子。

使用Applescript,我已经制定了Mail的处理规则,将BBEdit连接到R进行统计处理,创建了复杂的Folder Actions,并在iPhoto和Aperture中对照片进行了基于时间的大规模重组。我还创建了带有按钮和文本显示的迷你应用程序。基本上,这是使用GUI自动操作复杂的应用程序。

使用Bash脚本,我使用Imagemagick创建了自动图像处理例程,使用Ghostscript创建了PDF处理例程,时间和日期例程,以及使用Bash,sed / awk和Perl进行了很多文本处理。Unix实用程序倾向于精简,快速和灵活,而Bash是将它们组合为功能强大,简单易用的工具的好方法。

有时我确实从Applescript中调用Bash脚本,通常是出于文本处理目的(GREP)或用于轻松进行网站提取(curl)。我几乎总是使用这种技术来获取一些数据或变量以在Applescript中进一步使用。


嗯,这些具体示例非常有帮助。谢谢你 顺便说一下,您对AppleScript有建议的学习资源吗?对于一个完整的初学者。(我过去曾经使用过一些Bash脚本,也许自己也可以重新学习。)
Noldorin 2012年

2
是的,我从中受益最大的书是马特·诺伊伯格(Matt Neuberg)的“ AppleScript:权威指南”。Apple的开发人员文档尚可,值得参考,但Neuberg的书非常诚实地评估了该语言的优缺点。您会发现Applescript对“自然”语法的坚持不是很自然,而且在许多情况下是违反直觉的。Neuberg澄清了何时发生以及为什么。
2012年

这正是我最初对语言的印象。这种介于机器语言和自然语言之间的中途房子似乎很尴尬。为推荐喝彩!
Noldorin 2012年

3

它可能过于简单化,但是shell脚本用于组合现有程序以执行新任务,而AppleScript则用于远程控制(主要是GUI)应用程序。典型的Unix程序通常读取一些输入并产生一些输出,而shell脚本可以使它们结合在一起。AppleScript将使GUI应用程序自动化。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.