「osascript」でダイアログボックスを表示する

海上忍
2011-04-14 15:33:00
  • このエントリーをはてなブックマークに追加
最新特集【一覧】

 Mac OS X独自のコマンドに「osascript」がある。プロセス間通信機構「Open Scripting Architecture(OSA)」の処理系であり、Mac OS XにおいてはもっぱらAppleEventを扱う目的で利用される。もっと砕いて言うと、AppleScriptのインタープリタだ。

 このosascript、Mac OS X 10.0(Cheetah)当時から存在するが、あまり利用されてこなかったように思う。スクリプトエディタというGUIの専用ツールが提供されていることや、Tiger以降はAppleScriptのコーディングさえ不要な「Automator」が用意されたことを考えれば、あえて使う必要性が低かったともいえる。

 さらに、10.0当時は可能だったダイアログボックスの直接呼び出しが、ふと気づけばできなくなっていた。以前は「osascript -e 'display dialog "Hello"'」とすると、「Hello」と書かれたダイアログをTerminalから表示できたのだが、Snow Leopardの現在では「execution error: No user interaction allowed. (-1713)」とエラーになってしまう。

 これは惜しい。UNIXシェルからAppleScriptを実行できるのは意味あること、Yes/Noの確認やコマンド実行結果を出力するとき、ダイアログボックスはなにかと重宝するはずだ。これが可能であれば、わずかな処理のためにAutomatorアプリをつくる、というムダを省ける。

 調べたところ、なにかアプリケーションを経由すれば表示できることがわかった。AppleScript Runner(/System/Library/CoreServices/AppleScript Runner.app)を使うといいらしいが、筆者はFinderで試したところ、期待どおりの結果を得られた。

 以下に示すシェルスクリプトは、UNIXコマンド(cal)の実行結果をダイアログボックスに表示する、というシンプルなもの。しかし、シェルからApple Scriptのダイアログを呼び出すという目的は達成できているはずだ。整形していないためズレているカレンダーは、笑いどころなので念のため。

#!/bin/sh

osascript << EOF
tell application "Finder" to display dialog (do shell script "cal")
EOF
ダイアログボックスにUNIXコマンド「cal」の実行結果を表示したところ ダイアログボックスにUNIXコマンド「cal」の実行結果を表示したところ
  • 新着記事
  • 特集
  • ブログ