次のページ 前のページ 目次へ

11. Bash

login に有効なユーザ名とパスワードの組み合わせを送ると、loginは、/etc/passwd をチェックし、どのシェルを起動すべきか確認する。 Linux システムではほとんどの場合、それは bash である。bash の仕事はユーザのコマンドを読み込んで、自分のプロセス上でそのコマンドが実行さ れるのを確認することである。bash は、ユーザインターフェイスであると 同時にプログラミング言語のインタープリタでもある。

ユーザインターフェイスとして見た場合、bash は、まずコマンドを読み込 み、次に、もしそのコマンドが cd のような「内部コマンド (internal command)」であるなら、自分でそれを実行し、cpstartx のような「外部コマンド(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 をセットし、dodone の間にあるコマンドを実行する。このケースでは、11 のパッチファイルで あったが、たとえそれが 3000 個あったとしても同じように簡単に処理されていたは ずである。

11.1 設定

/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 を使えるようにするために、変数 EDITORvi にセットしている。

11.2 演習

bash の基礎は簡単に学べる。しかし、そこで終わらないこと。それは信じ られないくらい奥が深いからである。より良いやり方がないか調べる癖をつけること。

シェルスクリプトを読んで、理解できない部分を調べること。

11.3 参考文献等


次のページ 前のページ 目次へ