タイトルBrowsing Mac OS X》Teminalやシェルスクリプトで使えるMacなコマンドカテゴリーMac OS X, Browsing Mac OS X
作成日2001/5/21 5:14:53作成者新居雅行
Mac OS XのコアOSはBSDが採用されており、Terminalアプリケーションを使うことで、さまざまなコマンドを入力して処理ができることは良く知られている。そのコマンドは、もちろんUNIXで一般的に使われているコマンドが大半である。たとえば、ファイルのコピーや移動は、cpだとかmvだとかいったコマンドが用意されているのである。それらを使って手作業での処理はもちろん、シェルスクリプトとして、一連のコマンド処理を連続的に行うという手法も使える。シェルスクリプトでは、単に連続してコマンドを実行するだけでなく、変数を使ったり条件分岐や繰り返しができるなど、プログラミング言語と言ってもよい。もちろん、一般ユーザがシェルスクリプトの作り方までを知っておく必要はないのであるが、開発者やシステム管理をする場合には、今までのMac OSでは使えなかったこうしたシェルスクリプトが使える点は多いに活用すべきだろう。
コマンド入力やシェルスクリプト作成では、Mac OS X独自の事情を考慮しないといけないということもあるのだが、実は大半はOSに依存しない内容であると言ってもよい。つまり、市販の書籍でUNIXコマンドの使い方とか、シェルスクリプトの書き方などの情報が得られるが、それらの書籍などの情報は大方はそのまま使えると言っても過言ではないのである。だから、UNIXコマンドやシェルスクリプトをあまり知らないという場合には、そうした書籍などを購入して、ひととおり勉強しておいて決して損はしない。パスやカレントディレクトリといった考え方を含むファイルの指定、コマンドやその引数の指定方法、シェルによるさまざまな展開処理、標準入出力やパイプといった基本概念を知り、そしてどんなコマンドがあるかを勉強していくことになる。シェルスクリプトはちょっと独特の書き方をする(end ifではなくfiだったり)が、C言語に慣れていればそれほど難しいものではないだろう。
だが、UNIXコマンドだけしか使えないというわけではない。Mac OS X独自のコマンド、あるいはMac OS Xでしか意味のないコマンドなど、いわばMacなコマンド群があり、これらを活用することで、よりOSの機能をうまく使いこなすことができる。たとえば、開発をしている人だと、配布用のディスクイメージファイルをシェルスクリプトで作ったりということをしたいかもしれない。そのときにはもちろん、UNIXの標準コマンドだけで何とかなる場合もあるかもしれないが、Mac OS Xの独自コマンドを使う必要も出てくるかもしれない。以下、そうしたMacなコマンドを紹介するが、各コマンドは記述がない限りは、「man コマンド名」というコマンドをTerminalの画面で打ち込むことで詳細を参照することができるので、実際に使う上ではmanコマンドによるマニュアルを一度は目を通しておくことをお勧めする。

まずは、openコマンドだ。「open ファイル」によって、要はFinderでダブルクリックしたのと同じ効果になり、そのファイルを開く。ファイルが文書ファイルなら、アプリケーションを起動して文書を開く(ただし、関連づけられているアプリケーションがある場合)。ファイルがアプリケーションなら、そのアプリケーションを開くが、パッケージになっているアプリケーションでは、ルートのディレクトリを指定する。これは、このコマンドに限らず、「パッケージ化されたアプリケーションはルートのパスを指定する」というのが原則だ。たとえば、TexitEditはディスク上では/Applications/TextEdit.appというディレクトリをルートにしたパッケージであり、.appまで含めた指定が必要だ。
また、-aオプションを知っておくと便利だ。これはさしずめドラッグ&ドロップに対応すると言えばよいだろうか。-aオプションで、開くのに利用するアプリケーションを指定できる。たとえば、

open -a /Applications/TextEdit.app ~/original

というコマンドで、ログインしているユーザのホームディレクトリ(~だけで指定できる)にあるoriginalというファイルを、TextEditで開くのである。

ファイルのコピーや移動は、cpやmvを使うという点は、一般的なUNIXと変わりはない。ただし、パッケージ化されたアプリケーションなどのバンドル形式のものは、Finder上では一見すると1つのファイルに見えるが、その成り立ちはディレクトリだと思わないといけないのでそれも注意が必要だ。たとえば、TextEditをコピーする場合「cp /Applications/TextEdit.app /Volumes/disk2」ではいけない。TextEdit.appがディレクトリだからだ。その場合は、「cp -R /Applications/TextEdit.app /Volumes/disk2」のように、-Rオプションを付けて、ディレクトリごとコピーするという手法を使う。ちなみに、小文字の-rでも同じように動作するようだ。なお、ハードディスクの別のパーティションや別のディスクは、Finderではあたかもルートに存在するように見えるが、コマンドの世界(ディレクトリ階層)では、/Volumesというパスの下に存在する。マウントを解除すればその存在はなくなる。
cpコマンドはファイルのコピーはできるが、リソースを含むファイルをコピーした場合は結果的に正しくコピーはされない。データフォークしか正しくコピーできないようなのだ。UFSの場合にはリソースフォークとデータフォークがいわば別ファイルのようになっているので何とかなるのかもしれないが、もし、リソースまで含みでコピーをしたいのなら、CpMacというコマンドを使うのがより確実だろう。これは、manによるマニュアルはないものの、Inside Mac OS Xでも解説されているもので、単に

/Developer/Tools/CpMac 元ファイル コピー先ディレクトリ

という記述で利用可能だ。CpMacのパスにあるように、このコマンドは、DeveloperToolsのインストールを必要とする。また、コマンドの存在するパスは一般にはコマンド検索対象になっていないため、フルパスを指定するなどの方法で稼働させる必要があるだろう。
(続く)
関連リンク