タイトルBrowsing Mac OS X》Teminalやシェルスクリプトで使えるMacなコマンド(続き)カテゴリーMac OS X, Browsing Mac OS X
作成日2001/5/21 5:22:42作成者新居雅行
ファイル関連では、SetFileとGetFileInfoも知っておくとよい。いずれも、DeveloperToolsのインストールが必要で、インストール後には、/Developer/Toolsディレクトリに存在する。SetFileはmanコマンドでマニュアルは表示できるが、GetFileInfoはマニュアルは出てこない。GetFileInfoについては、Terminalで「/Develoer/Tools/GetFileInfo」だけを入力して、使用方法を表示させSetFileのオプションと対比させればだいたいのことは分かるだろう。
SetFileは、ファイルの情報を設定するのだが、Finder関連情報が設定できる。ファイルタイプ、クリエイタ、作成日、修正日、そしてさまざまな属性の設定が、このコマンドでできるのである。GetFileInfoはそれらの情報を標準出力に書き出すものだ。おそらくSetFileの方が一般にはよく使うものと思われる。
ちなみに、/Developer/Toolsには他にもUNIXには存在しないリソースコンパイラなどといったいろいろコマンドがあるが、使い方が分からないものもいくつかある。

ちょっと変わったコマンドとしては、AppleScriptプログラムを実行するosascript、AppleScriptのコンパイルを行うosacompileがある。osascriptは引数に指定したテキストファイルやあるいは標準入力から、テキストで与えたAppleScriptプログラムを実行するのである。たとえば、スクリプトを書き込んだファイルtest.txtを実行する場合、そのファイルのありかがカレントパスであるなら、

/usr/bin/osascript test.txt

というコマンドで実行できる。osascriptの位置をフルパスで指定しないといけないのは、現状ではバグであるということで、パスを省略すると実行はするけどもエラーになってしまう。おそらくはシェルスクリプトで使うことになると思われるが、そのあたりは事情が分かっていれば問題はないだろう。ここで、text.txtのファイルの内容は、TextEditで作るとすれば、MacRomanあるいはShift-JISでファイルを保存する。UNICODEやutf-8で保存はしないようにする。そうすれば、漢字で指定したファイル名など日本語文字列は問題なく使える。ただ、AppleScriptの世界でのパスは、ディレクトリ階層ではなく、最初にディスク名を書きコロンで区切るタイプである。プログラムでパスを生成して処理をさせる場合には、他のコマンドとの整合性を取るためには少し苦労することになるだろう。
osacompileは、テキストで記述されたスクリプトから、Script Editorの文書を作る。基本的な利用ではコンパイル済みスクリプトが作成できる。AppleScriptのアプリケーションまで作成できるかと思っていろいろ設定をやってみたけど、きちんと動くアプリケーションは作れなかった。

次は、ディスクイメージファイルだ。ディスクイメージファイルを作成するhdiutil、ディスクイメージふぃあるのマウントやアンマウントを行うhdidというコマンドがある。これらのコマンドの使い方は、Stepwise.comに以前に詳しいものが掲載されていたので、そちらをごらんいただくことにしよう。

◇Creating .dmg images on Mac OS X 10.0
 http://www.stepwise.com/Articles/Technical/2001-03-29.01.html

hdidコマンドでマウントでき、マウントした結果は、「/Volumes/ボリューム名」というパスで利用できるのが基本だ。だから、マウントした結果にファイルをコピーするなどは、このディレクトリに対して行えばいいのだが、hdidコマンド終了直後はまだマウントが完全に行われていない。だから、すぐにcpコマンドなどを実行してもエラーになってしまう。とりあえず考えられる対応策としては、すぐにコピーをしないで別の作業をするということだ。数秒もあれば十分にマウントできる。あるいは「read x」など入力待ちのコマンドをシェルスクリプト中に記述し、マウントされるのを目で確認してreturnキーを押して続きを実行するという手段もあるだろう。

Mac OS Xのアプリケーションなどの開発では、Project Builderを使うことも多いだろう。Project Builderでのコンパイルなども、コマンドラインからコントロールできる。これは、manによるマニュアルでは参照できないが、Project Builderのヘルプで参照できるが、pbxbuildというコマンドが利用できる。プロジェクトの存在するフォルダをカレントフォルダにして、pbxbuildコマンドを入れるだけで、そのプロジェクトの再ビルドを行う。「pbxbuild clear」ならクリアを行うといった具合だ。このコマンドを利用すると、ビルドから配布ファイルまでの作成を自動的にできるようになる。

最後にシェルスクリプトの作り方だが、TextEditなどのアプリケーションを使ってファイルを作成し、そうして作ったファイルに、「chmod a+x ファイル名」などとして、実行権限を付与すればよい。あとはパスを指定して、実行することができる点は、他のUNIXの場合と同じだ。コマンドのファイル名に日本語文字列が入っている場合には、スクリプトのファイルをUTF-8で保存しなければならない。UNICODEで保存するのではなく、UTF-8で保存する。そうすれば、TextEditで日本語のファイル名などを記述して作ったシェルスクリプトもきちんと稼働する。
ファイル名自体はボリュームにはUTF-8で保存されているのだが、濁点や半濁点のあるキャラクタは、元のキャラクタと濁点・半濁点をそれぞれ別のキャラクタで保存している。だから「か」は3バイト使うが「が」なら6バイトを使っている。こうした形式のUTF-8もあるようなのだ。一方、TextEditでUTF-8で保存すると、「が」でも3バイトとして記録する形式になっている。従って、UTF-8ファイルの中身と、ファイル名の文字列は、バイト単位では一致していないことになってしまう。しかしながら、シェルスクリプトの実行はそれでも正しく行えるようになっている。とりあえず、結果はオーライというところだろうか。
関連リンク