FreeBSD ハンドブック
Prev | Chapter 3. Unix の基礎知識 | Next

# 3.7. シェル

FreeBSD では日々の作業のほとんどは、 「シェル」と呼ばれるコマンドラインインタフェイスを通して行われます。 シェルの主な仕事はコマンドを入力チャンネルから受け取り、 そしてそれらを実行することです。 大部分のシェルはさらに組み込みの機能を持っていて、日々の作業、 ファイル管理やファイル名の展開、コマンドライン編集、 コマンドマクロ、環境変数などに便利です。 FreeBSD には `sh` (Bourne Shell) や `tcsh` (高機能 C-shell) が含まれています。 また、 これ以外にも `zsh` や `bash` などたくさんのシェルが FreeBSD Ports Collection から利用可能です。

「あなたは、どのシェルを使いますか?」という質問は、 まったく趣味の問題です。 あなたが C のプログラマだったとすれば、 `tcsh` のような C 風のシェルの方が落ち着くかもしれません。 Linux から来た人や Unix のコマンドラインインタフェイスになじみがなければ、 `bash` を試すのも良いでしょう。 ポイントは、それぞれのシェルは、 あなたの好みの作業環境で利用できる(もしくはできない)独自の機能を持っているということ、 そして、どのシェルを使うことにするかを決めるのはあなた自身だということです。

シェルの一般的な機能の一つに、ファイル名の補完があります。 コマンドやファイル名の最初の数文字を与えて Tab キーを押すことで、 シェルにコマンドやファイル名の残りの部分を自動的に補完させることができます。 例をあげましょう。 二つのファイル `foobar`, `foo.bar` が あったとします。 ここで `foo.bar` の方を削除するには、 `rm fo[Tab].[Tab]` と入力します。

するとシェルは `rm foo[BEEP].bar` と出力するでしょう。

[BEEP] のところはコンソールのベル(訳注: 通常はビープ音が鳴ります)です。 これは複数のファイルがマッチしたため、 ファイル名の補完を完全に行なえなかったことを伝えています。 `foobar` と `foo.bar` は 両方とも `fo` ではじまるため、 補完できるのは `foo` までです。 ここで `.` を入力して Tab を押せば、 シェルはファイル名の残りの部分を補完できます。

もう一つあげられるシェルの特徴として、環境変数があります。 環境変数とは、シェルの環境変数空間におけるキーと値とのペアです。 この変数空間は、そのシェルから起動されたプログラムから参照でき、 それを利用してプログラムの設定を保存するのに利用されます。 下の表は、一般的な環境変数とその意味を示したものです。

変数名 | 意味
--- | ---
`USER` | 現在のログインユーザのユーザ名。
`PATH` | コロンで区切られた実行ファイル探索のための ディレクトリのリスト。
`DISPLAY` | 接続する X11 ディスプレイのネットワーク名(存在する場合のみ)。
`SHELL` | 現在のシェル。
`TERM` | ユーザの端末名。 端末のケーパビリティを決定するのに使われる。
`TERMCAP` | 種々の端末の機能を実現する端末のエスケープコードの データベースのエントリ。
`OSTYPE` | オペレーティングシステムの種別。 たとえば FreeBSD。
`MACHTYPE` | システムが動作している CPU のアーキテクチャ。
`EDITOR` | ユーザの選んだテキストエディタ。
`PAGER` | ユーザの選んだテキストページャ。
`MANPATH` | コロンで区切られたマニュアルページ探索のための ディレクトリのリスト。

環境変数をセットする方法は、 それぞれのシェルごとに多少異なります。 たとえば、`tcsh` や `csh` 等の C シェルでは `setenv` を使います。 `sh` や `bash` 等の Bourne シェルでは `set` と `export` を使います。 たとえば `csh` か `tcsh` で `EDITOR` 環境変数の値を `/usr/local/bin/emacs` に セットするか変更するには、次のようにします。

    % setenv EDITOR /usr/local/bin/emacs

Bourne シェルでは次のようになります。

    % export EDITOR="/usr/local/bin/emacs"

ほとんどのシェルでは、 コマンドライン中の変数名の前に `$` 文字を置くことで、 環境変数を展開させることができます。 たとえば、 `echo $TERM` は `$TERM` が セットされている内容を表示します。 それはシェルが `$TERM` を展開して `echo` に渡しているからです。

シェルはさまざまな特殊文字を、特別なデータを表すものとして扱います。 その特殊文字はメタキャラクタと呼ばれます。 もっとも一般的なものは `*` で、 これはファイル名に含まれる、あらゆる文字を表します。 これらの特殊なメタキャラクタはファイル名の展開に使われます。 たとえば、`echo *` と入力すると `ls` と入力したのとほとんど同じ結果を得られます。 これはシェルが `*` とマッチするすべてのファイルを 受け取って `echo` のコマンドラインに渡し、表示するからです。

これらの特殊文字をシェルに解釈させないようにするため、 特殊文字の前にバックスラッシュ文字 (`\`) を置くことができます。 `echo $TERM` は、 あなたの端末が何にセットされているかを表示します。 `echo \$TERM` は `$TERM` と そのまま表示します。

## 3.7.1. シェルの変更

シェルを変更する一番簡単な方法は `chsh` コマンドを使うことです。 `chsh` を実行すると 環境変数 `EDITOR` で示されたエディタが立ち上がります。 環境変数をセットしていなかった時は `vi` が立ち上がります。 “Shell:” の行を適宜変更してください。

`chsh` に `-s` オプションをつけると、 エディタを起動せずにシェルを変更することが可能です。 たとえば、シェルを `bash` に変えたいなら、次のようにしてください。

    % chsh -s /usr/local/bin/bash

`chsh` をパラメータなしで実行し、 エディタでシェルを変更しても同じことができます。

> Note: 使おうと思っているシェルは必ず `/etc/shells` 中に書かれているものでなければなりません。 シェルを Ports コレクションから インストールしていたのであれば、すでにそれは行なわれていますが、 手動でインストールした場合は、それを忘れずに行ってください。

> たとえば、`bash` を手動で `/usr/local/bin` にインストールした場合 以下のようにする必要があります。

>     # echo "/usr/local/bin/bash" >> /etc/shells

> そして `chsh` を実行してください。

Prev | Home | Next
デーモン、シグナルとプロセス終了 | Up | テキストエディタ