login
に有効なユーザ名とパスワードの組み合わせを送ると、login
は、/etc/passwd
をチェックし、どのシェルを起動すべきか確認する。
Linux システムではほとんどの場合、それは bash
である。bash
の仕事はユーザのコマンドを読み込んで、自分のプロセス上でそのコマンドが実行さ
れるのを確認することである。bash
は、ユーザインターフェイスであると
同時にプログラミング言語のインタープリタでもある。
ユーザインターフェイスとして見た場合、bash
は、まずコマンドを読み込
み、次に、もしそのコマンドが cd
のような「内部コマンド
(internal command)」であるなら、自分でそれを実行し、cp
や
startx
のような「外部コマンド(external command)」であるならそのプロ
グラムを探し出して実行する。
また bash
は、コマンドヒストリーの記憶やファイル名の補完などの優れた
機能も持っている。
bash
がプログラム言語のインタープリタとして働いていることは既に見た。
init
がシステム起動のために実行するスクリプトは通常シェルスクリプト
であり、それらのスクリプトは bash
によって実行されている。適切なプロ
グラム言語とコマンドラインで利用できる普通のシステムユーティリティがあり、そ
れを使って自分のしていることを自覚できる程度の知識があれば、その組み合わせから
大きな力を引き出せる。例えば、(これは自己満足にすぎないかもしれないのだが、)
わたしは先日ソースコードのディレクトリに大量のパッチを当てる必要が生じた。
しかし、わたしはそれを以下のような一行のコマンドで解決した。
for f in /home/greg/sh-utils-1.16*.patch; do patch -p0 < $f; done;
このコマンドは、わたしのホームディレクトリにあるファイルのうち、ファイル名が
sh-utils-1.16
で始まり .patch
で終わるものすべてを対象とし
て認識する。そして、それらを
ひとつずつ順番に取り上げて、変数 f
をセットし、do
と done
の間にあるコマンドを実行する。このケースでは、11 のパッチファイルで
あったが、たとえそれが 3000 個あったとしても同じように簡単に処理されていたは
ずである。
/etc/profile
というファイルが、システム全体における bash
の
振る舞いをコントロールしている。そこに何かを加えたとすると、それはシステム上
で bash
を使う全員に影響を及ぼす。そのファイルでは、(環境変数)
PATH
へのディレクトリの追加や、MAIL
ディレクトリの変数の
設定などがなされる。
キーボードのデフォルト設定は、しばしば満足のいくものになっていないことが多い。
それを実際に解決するのが、readline
である。readline
は、コ
マンドラインのインターフェイスを担当する(bash
とは)別のパッケージに
なっているプログラムで、いくつかの先進的なライン編集機能を持つのはもちろん、
コマンド履歴やファイル名補完といった機能を提供する。
readline
は、コンパイル時に bash
に組み込まれる。デフォルト
では、readline
はホームディレクトリの .inputrc
ファイルを
使って設定するようになっている。bash
の変数である INPUTRC
を使って bash
用にこの設定ファイルを上書きすることもできる。例えば
Red Hat 6 では、/etc/profile
において INPUTRC
は
/etc/inputrc
を上書きするよう設定されている。これは、
バックスペースやデリート、あるいはホームキーやエンドキーが誰にとっても上手
く働くようにするためである。
bash
はシステム全体の設定ファイルを読み終わると、今度は個人用設定
ファイルを探し、ホームディレクトリにある .bash_profile
,
.bash_login
,.profile
をチェックする。そしてこの順番で最初に
見つけたファイルを実行する。
もし他人の bash
の振る舞いを変更せずに自分のものだけを変えたいの
であれば、ここを編集すればよい。例えば、多くのアプリケーションは動作方法を
コントロールするのに環境変数を使っている。わたしは Midnight Commander(優れた
コンソールベースのファイルマネージャ)で組み込みのエディタではなく
vi
を使えるようにするために、変数 EDITOR
を vi
にセットしている。
bash
の基礎は簡単に学べる。しかし、そこで終わらないこと。それは信じ
られないくらい奥が深いからである。より良いやり方がないか調べる癖をつけること。
シェルスクリプトを読んで、理解できない部分を調べること。
bash
に関する本が出ているが、いい本かどうかは知らない。bash
に関するフリーで新しい入門書があるかどうか知らない。
御存知なら、メールで URL を教えてほしい。