4.8. シェル

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

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

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

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

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

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

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

環境変数をセットする方法は、 それぞれのシェルごとに多少異なります。 たとえば、tcshcsh 等の C シェルでは setenv を使います。 shbash 等の Bourne シェルでは setexport を使います。 たとえば cshtcshEDITOR 環境変数の値を /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 と そのまま表示します。

4.8.1. シェルの変更

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

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

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

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

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

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

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

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

本文書、および他の文書は ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ からダウンロードできます。

FreeBSD に関する質問がある場合には、ドキュメント を読んだ上で <questions@FreeBSD.org> まで (英語で) 連絡してください。
本文書に関する質問については、<doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。