8 Shell Commands (シェルコマンド)

シェルはいろいろなプログラム(シェルコマンド)を統合するためのスクリプト言語で、例えば、ターミナルを起動して実行するコマンドを入力したときのようにインタラクティブに使われることも多いです。

シェルスクリプト言語の紹介については、このAppleによるシェルのチュートリアルを見てください。

8.1 Executing Commands / Filtering Text コマンドの実行/テキストのフィルタリング

TextMateではさまざまなコンテクストでシェルコマンドを実行できます。実用的な方法には次のようなものがあります:

  1. 現在のドキュメントで、現在の行をシェルコマンドとして実行するためには、何も選択せずに、⌃Rを押してください、もしくは、 s選択範囲をシェルスクリプトとして実行するためには、1行以上を選択して⌃Rを押してください。(shebangもサポートされています。)

    Execute Line

  2. TextメニューからFilter Through Command… (⌥⌘R)を選択することによって、実行するシェルコマンドを入力し、なにがインプット(stdin)として与えられ、さらにコマンドのアウトプットをどうしたいかを決めるパネルが開きます。(たいてい選択されたテキストをインプットにセットしてアウトプットを使ってその選択されたテキストを置き換えたいでしょう。)

    Filter Through Command

  3. バンドルエディタのコマンド。最初の二つの方法は主に、一回限りのコマンドです。しかし、バンドルエディタのコマンドは何度も使うものです。ここで紹介する方法は2番の方法と同じです。つまり、インプットとアウトプットをどうしたいかを指定でき、なおかつアウトプットを(例えば、現在の単語について調べるコマンドのために)ツールチップでアウトプットを表示させたり、(例えばプロジェクトをビルドして、結果を順に表示させるために)HTMLで表示させたりできます。また、コマンドが実行される前にドキュメントを保存するように指定したり、コマンドにショートカットやタブトリガーを割り当てることができます。

    Command Editor

8.2 Search Path サーチパス

ターミナルでコマンドを実行すると、(絶対パスなしで設定されている)シェルはPATH変数の値を使って、コマンドを見つけます。例えばruby/usr/bin/rubyにあります。svnは(私のでは)/opt/local/bin/svnにあります。

TextMateは通常はFinderからのPATHの値を継承します。しかし、それはほんのいくつかの場所を検索することしか指定されていないので、あまり役に立ちません。

TextMateは代わりに、実際のシェルコマンドを実行する前に、($TM_SUPPORT_PATH/libにあるbash_init.shという名前の)カスタムスクリプトを実行します。このスクリプトは以下のコードを含みます:

if [ ! -f "$TM_BASH_INIT" ]; then

   # First read system-wide profile
   [ -f /etc/profile ] && . /etc/profile

   # Then find the first local profile
   if   [ -f ~/.bash_profile ]; then . ~/.bash_profile
   elif [ -f ~/.bash_login   ]; then . ~/.bash_login
   elif [ -f ~/.profile      ]; then . ~/.profile
   fi

fi

これが意味するところは、あなたが自分でカスタマイズされたbash_init.shを作らない限り、TextMateは最初に/etc/profileをソースにして、その後、あなたのホームフォルダにある、初めのbashの初期化(イニシャライゼーション)ファイルをソースにします。

もしあなたがいつもbashシェルを使わないなら、(tcshzshのようなものでは)いつも使うパスを設定しなければいけないでしょう。例えば、~/.bash_profileファイルを作成し、以下のような行を含む必要があります:

[ -f /etc/profile ] && . /etc/profile
[ -f ~/.bashrc ]    && . ~/.bashrc

export PATH="$HOME/bin:/opt/local/bin:$PATH"

これは、パスに~/bin/opt/local/binを追加します。~の代わりに、$HOMEを使うのを忘れないでください。なぜなら、二重引用符のなかで~は展開されませんが、$HOMEは展開されるからです。

重要: (コマンドの最初の行に#!/usr/bin/ruby#!/usr/bin/env rubyのような)個別のインタープリタをコールするためのshebangを使うシェルコマンドはこの設定の手順を使いません。なので、追加されたパスを取得しません。ログインしたときにFinderが読み込む環境変数に対応したキー/値のペアをもっているプロパティーリストである~/.MacOSX/environment.plistPATHを設定することによって引数をとることができます。

よって、もし/opt/local/binをパスに追加したいなら、~/.MacOSX/environment.plistというファイルを作って、次のものを追加してください:

{ PATH = "/opt/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"; }

このファイルを作成(または編集)した後には、その効果を得るためにあなたのアカウントにログインし直す必要があります。

なお、このファイルには$HOMEを使うことはできません。なので代わりに$HOME/binには/Users/allan/binのように書いてください。(allanをあなたのユーザ名に変えてください。)