前節(§2.3.3節)で、コマンドの補完について説明しました。 では、シェルは、どこにあるコマンドを捜して、補完を行なったりや候補として 表示しているのでしょうか? また、man コマンドで、ページャとして、jless を使うのは、どこに書かれているのでしょうか?
これらは、環境変数(environment variable)というもので制御されて います。シェルはもちろんそうですが、シェルだけでなく、多くのアプリケーショ ンプログラムも、環境変数の値によって、その動作を変えるように作られていま す。環境変数は、printenv コマンド 55 で見られます。printenv に引数を与えなけ れば、すべての環境変数を表示し、環境変数の名前を引数で与えれば、その環 境変数のみを表示します。環境変数を定義するには、setenv コマンドを使います。 環境変数を定義をクリアーするためには、unsetenv コマンドを使います。
% printenv USER=ohba LOGNAME=ohba HOME=/home/ohba PATH=/home/ohba/bin:/usr/local/jdk/bin:/usr/local/bin:/usr/X11R6/bin: /usr/local/sbin:/usr/games:/usr/bin:/usr/sbin:/bin:/sbin MAIL=/var/mail/ohba SHELL=/usr/local/bin/tcsh OSTYPE=FreeBSD EDITOR=vi PAGER=jless ... (以下、省略) % setenv EDITOR emacs % printenv EDITOR emacs %重要な環境変数について説明します。
% which less /usr/bin/less % which jless /usr/local/bin/jless % which printenv printenv: シェルに入っているコマンドです.
練習
2
環境変数 LANG の値を、C と ja_JP.eucJP で、シェルや、アプリケー ションの挙動がどう変わるか調べてみよう。コマンドとしては、 date、cal、xcalender などを試してみよう。
環境変数と似たものに、シェル変数というものがあります。 環境変数が、シェルだけでなく、他のアプリケーションも参照する変数であるの に対し、シェル変数はシェルだけが使用します。また、環境変数は、あるシェル から、別なシェルやアプリケーションを立ち上げた場合に引き継がれますが、 シェル変数は引き継がれません。現在のシェル変数の一覧は、set コマンド で見ることができます。
% set _ set ...(中略) autolist ... (中略) history 100 home /home/ohba path (/home/ohba/bin /usr/local/jdk/bin /usr/local/bin /usr/X11R6/bin /usr/local/sbin /usr/bin /usr/sbin /bin /sbin) prompt %{^[[33m%}%m:%~%#%{^[[m%} ...(以下略) % set history=200 % echo $history 200 % echo $EDITOR vi % echo $_ echo $EDITOR
シェル変数には、set するだけで意味をもつ変数(autilist など)と、その変 数の値が意味をもつ変数(path や history など)があります。上の set の出力 の最初の行 _ (アンダースコア)という特殊なシェル変数には、tcshでは直前に 実行されたコマンドが入っています。環境変数もシェル変数も、その名前の前に、 $をつけて参照できます。
home や path などのシェル変数は、環境変数で定義されている HOME や PATH と全く同じ内容58 で、 どちらかを変えると、自動的に他方も変わります59。環境変数やシェル変数の設定は、シェルの設定ファイルの書かれて いますが、それについては§2.3.7節で説明します。