AppleScript対Bashスクリプト?


13

私は長年Windowsの「パワーユーザー」であり、最近Mac OS Xに移行することを決定した開発者です。

OS X Lionおよび実際には以前のバージョンでは、OS Xでのスクリプト作成と自動化には、AppleScriptとBashスクリプトの2つの主なオプションがあるようです。後者はもちろん、OS XがUnix "bash"シェルを使用した直接的な結果ですが、前者はApple自身の革新です。構文は明らかに非常に異なり、AppleScriptには疑似自然言語スタイルがあります。

私の質問は、OS Xの異なるタスクと目的にAppleScriptとBashスクリプトがよく使われます(実際、使用されるべきです)。もちろんコードですが、いくつかのより高度なものはすぐに複雑になります。Appleが後にAppleScriptを発明したにも関わらず、これら2つの言語には重複した、またはほぼ同一の使用例がありますか?あるいは、異なるシナリオを念頭に置いて使用することを意図していますか?高レベルの概要といくつかの特定の例に感謝します。


「Hazel」を購入するファイルやフォルダーに関連するタスクがある場合、それは非常に便利なルールベースのツールです。また、ルールに基づいてシェルスクリプトとApplescriptをキックすることもできます。
スチュアート・ウッドワード

回答:


17

シェルスクリプトとAppleScriptの両方は、どちらか適切な場所であればどこでも使用できます。

AppleScriptは、アプリやユーザーレベルのシステム機能と通信する場合に、より適切に機能します。(たとえば、あなたはtell app "iTunes" to playそれを言うことができます、またはtell app "Finder" to open the first file of the second window。)

低レベルのシステムオブジェクトやUnixのようなものと通信する場合、シェルスクリプト(bashと呼ばれます)の方がうまく機能します。

両方とも相互運用可能です。AppleScriptからシェルコマンドを呼び出すには do shell script "command here" AppleScriptコードを呼び出すことができますosascript -e "AppleScript"。さらに、両者の間にはかなりのオーバーラップがあります(特にファイルシステムの操作に関して)。

確かに、オンラインでシェルスクリプトを学習するためのリソースはAppleScriptよりも多く、AppleScriptが「読み取り専用」言語(つまり、読むよりも書くのが難しい)であるという評判があるのは役に立ちません。

いずれにせよ、スクリプトを実行する最も現代的な方法はAutomatorを使用することです。Automatorでは、インストールしたさまざまなアプリのビルド済みモジュールとともにシェルまたはAppleScripting(または両方)を使用できます。


ありがとう。これは非常に有益な概要です。AppleScriptのパフォーマンスに関する優れた学習リソースに関する推奨事項はありますか?(bashスクリプトも、おそらく自分で簡単に見つけることができますが。)
Noldorin

3
AppleScriptは読み取り専用であるという評判(やや稼いだ)を持っています。シェルスクリプトは、スペクトルの「書き込み専用」の端に傾くことがあります。
ダニエル

@Noldorin AppleScriptを学ぶために本を買いましたが、特定のコマンドの構文を覚えようとするときは、最初にGoogleを使用し、次に本のインデックスを使用する傾向があります。
Cajunluke

@CajunLuke:ああ、結構。AppleScriptを初めて学んだのはどうしてですか??
ノルドリン

@Noldorinかなり試行錯誤とGoogle。Googleにとっては難しいものもあるため、この本を購入しました。
Cajunluke

8

どちらのスクリプトコンテキストも他のスクリプトコンテキストで実行できます(シェルスクリプトは/usr/bin/osascriptAppleScriptを呼び出すために呼び出すことができ、AppleScriptにはdo shell scriptコマンド)、実際には一方が他方より適しているコンテキストがあります。

両方のスクリプト言語は「接着剤」言語です。それらは自分自身で最小限のことを実行でき、代わりに他のプログラムの機能を呼び出すことでタスクのほとんどを実行できます。シェルスクリプトはUnixパイプを使用しますが、AppleScriptはtell application構文ますます。

分岐点は、AppleScriptsがスクリプト可能なアプリケーション(ほとんどの場合GUIアプリケーション)と直接通信するのに対し、シェルスクリプトは主にコマンドラインプログラムと通信することです(一部はグラフィックユーザーインターフェースを起動できますが、多くはそうしません)。

ファイル管理タスクに関しては、両方のアプローチが機能します。Tell Application Finderファイルをコピーするか、実行することができますcpシェルスクリプトでコマンドを。それでは、なぜ一方を他方の上で使用するのでしょうか?確かに、一部のスクリプト作成者は他の言語よりも1つの言語に精通しているため、そのツールを使用することを好みます。ただし、スクリプトのユーザーを考慮することをお勧めします。AppleScriptは、Mac GUIから呼び出すことができます。AppleScriptアプリケーションをダブルクリックするか、ファイルをドロップするか、システム全体または特定のプログラム内でAppleScriptメニューを使用します。メールなどのプログラムは、着信メッセージに対してAppleScriptを実行してフィルタリングするように設定できます。Macを「Macに似た」方法で(つまりGUIから)使用することに慣れているユーザーにとっては、AppleScriptの方がアクセスしやすいことがよくあります。

シェルスクリプトは、多くの場合(常にではありませんが)ターミナルに存在します。既にターミナルを使用している場合、シェルスクリプトを実行すると、AppleScriptを呼び出すよりも便利な場合があります。一方、多くのユーザーは、ターミナルウィンドウにコマンドを入力したり、ターミナルウィンドウを開いて魔法をかけるスクリプトファイルをクリックしたりする必要があるため、手間がかかります。個人的には、シェルスクリプトの構文はAppleScriptの構文よりも読みやすいと思っていますが、私はそのスクリプトについて少数派だと思います。シェルスクリプト、さまざまなUnixライクシステムのユーザーになじみがあります。

いずれにしても、どちらもMacをよりよく制御するための強力なツールです。


ありがとうございました; これは確かに問題を明確にし、私の疑いのいくつかを確認します。
ノルドリン

Tell Application Finderファイルをコピーすると、表示される進行状況バーのあるウィンドウが開きますが、開かないことを推測してcpいます。そうですか?
TRiG 14

4

他の回答では、これらの2つのスクリプト手法の背後にある意図について、非常に高度な概要を示しています。たぶん、私はそれらをどのように使用するかの例を挙げます。

Applescriptを使用して、Mailの処理ルールを作成し、統計処理のためにBBEditをRに接続し、複雑なフォルダーアクションを作成し、iPhotoおよびApertureで写真の時間ベースの大規模な再編成を行いました。また、ボタンとテキスト表示を備えたミニアプリを作成しました。基本的に、これはGUIを使用した複雑なアプリの自動操作です。

Bashスクリプトを使用して、Imagemagickを使用した自動画像処理ルーチン、Ghostscriptを使用したPDF処理ルーチン、日時ルーチン、およびBash、sed / awk、Perlを使用した多くのテキスト処理を作成しました。Unixユーティリティは、無駄がなく、高速で、柔軟である傾向があり、Bashはそれらを非常に強力で簡単なツールに結合するための優れた方法です。

Applescript内からBashスクリプトを呼び出すことがありますが、通常はテキスト処理(GREP)または軽いWebサイトの取得(curl)のために使用します。AppleScriptでさらに使用するために、私はほとんど常にこの手法を使用して、少しのデータまたは変数を取得します。


ああ、これらの特定の例はかなり役立ちます。これをありがとう。ところで、AppleScriptの学習リソースとして提案されているものはありますか?完全な初心者向け。(私は過去に小さなBashスクリプトを使用しましたが、おそらく自分で再学習することができます。)
ノルドリン

2
はい、私が最も恩恵を受けた本は、Matt Neubergの「AppleScript:The Definitive Guide」でした。Appleの開発者向けドキュメントは大丈夫で、参考のために参考にする価値がありますが、Neubergの本はこの言語の長所と短所の両方を非常に正直に評価しています。「自然な」文法に対するApplescriptの主張はあまり自然ではなく、多くの場合、直観に反することがわかります。ノイベルクは、それがいつ起こるのか、なぜ起こるのかを明確にします。
アッシュ

それはまさに言語を最初に見たときの印象です。機械言語と自然言語の中間にあるこの家は、やや扱いにくいようです。推薦に乾杯!
ノルドリン

3

単純すぎるかもしれませんが、シェルスクリプトは既存のプログラムを組み合わせて新しいタスクを実行するためのものであり、AppleScriptはアプリケーション(ほとんどGUI)をリモートで制御するためのものです。従来のUnixプログラムは通常、入力を読み取って出力を生成し、シェルスクリプトを使用してそれらを組み合わせることができます。AppleScriptはGUIアプリケーションを自動化することです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.