FreeBSD では日々の作業のほとんどは, 「シェル」と呼ばれるコマンドラインインタフェイスを通して行われます. シェルの主な仕事はコマンドを入力チャンネルから受け取り, そしてそれらを実行することです. 大部分のシェルはさらに組み込みの機能を持っていて, 日々の作業, ファイル管理やファイル名の展開, コマンドライン編集, コマンドマクロ, 環境変数などに便利です. FreeBSD には sh(Bourne Shell) や csh(C-shell) が含まれています. また, これ以外にもたくさんのシェルが FreeBSD Ports コレクションから利用可能です. tcsh や bash などの高機能なものは, これに含まれています.
「あなたは, どのシェルを使いますか?」という質問は, まったく趣味の問題です. あなたが 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 | コロンで区切られたマニュアルページ探索のための ディレクトリのリスト. |
環境変数をセットしたりその値を見る方法は, それぞれのシェルごとに多少異なります. たとえば, csh や tcsh 等の C シェルでは setenv を使います. sh や bash 等の Bourne シェルでは set と export を使います. たとえば, 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 と そのまま表示します.
シェルを変更する一番簡単な方法は 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 を実行してください.