28.3 環境変数

ここでは,シェルの環境変数について学びます.

シェルに限らず,全てのプログラムは環境変数と呼ばれる変数をいろいろもっており,その変数に値を指定することにより,環境を変えることができます.

環境変数の一覧を見るには printenv コマンドを用います.

promptprintenv return2 MANPATH=/sw/share/man:/usr/X11R6/man:/usr/share/man TERM=xterm-color SHELL=/bin/bash SSH_CLIENT=210.170.217.128 54014 22 PERL5LIB=/sw/lib/perl5:/sw/lib/perl5 SSH_TTY=/dev/ttyp0 XAPPLRESDIR=/sw/etc/app-defaults/ http_proxy=http://ca:3128/ SGML_CATALOG_FILES=/sw/etc/sgml/catalog ..... .....

変数名の前に $ をつけることで特定の環境変数の値を参照することができます. echo コマンドのパラメータにすることでこの値を見ることができます.

promptecho $PATH return2 /sw/lib/wrappers:/sw/fix-apple-x11/bin:/opt/ECC/bin:/opt/HWB/bin:/sw/bin:/sw/sbin:/usr/local/bin:/usr/local/sbin:/usr/X11R6/bin:/bin:/sbin:/usr/bin:/usr/sbin

さて,環境変数というのは何に用いるのでしょうか?

たとえば, LANG という環境変数は, デフォルトで用いる言語を設定するために用います. これに例えば, ja_JP.eucJP を設定すると日本語を日本語EUCで利用する設定になります.具体的にはプログラムの出力などが日本語になることでしょう.

環境変数は, シェルから起動したプログラムに引き継がれます.環境変数は,各プログラムの中から参照できるので,シェルで適切な環境変数を設定しておけば,そこから起動されたプログラムはその環境変数を用いて適切な動作をすることができるということです.

環境変数の設定には export というコマンドを用います.

promptexport LANG=ja_JP.eucJP return2

シェルは各ターミナルウィンドウごとに走っていることに注意してください. 一つのシェルで環境変数を設定しても, 他のターミナルウィンドウのシェルの環境変数には影響がありません. ログインのたびにすべてのシェルで環境変数に特定の初期値を設定する方法は,related_s28.5 初期設定ファイルのところで学びます.

よく用いる環境変数をいくつか書いておきましょう.

変数名意味関連項目
HOMEホームディレクトリの絶対パス名review_s13.4.5 ホームディレクトリ
PATHコマンドの検索パスreview_s13.4.12 実行ファイルのパス
PRINTER標準で用いるプリンタ
EDITOR用いるエディタの種類
PAGER用いるページャの種類review_s13.4.7 ファイル内容の表示
LANG用いる言語
CLASSPATHJava で用いるクラスファイルの検索パス

シェル変数

環境変数と似たようなものにシェル変数というものがあります. シェル変数はその実行中のシェルのみに関係する変数で, シェルから起動したプログラムには影響を与えません, シェルの動作を変えたりする時に用いたり, あるいはシェルの情報を保持したりするのに用います.また,シェルスクリプトと呼ばれる小さなプログラムを書くときにも用います.

シェル変数の設定をするためには promptvar=value return2 とします.この場合,シェル変数 var に値 value が設定されます.シェル変数の参照も $ をつけることで実現できます.シェルが用いるシェル変数の名前は当然シェルによって異なりますが,例えば bash は PS1 という名前のシェル変数でプロンプトの設定を行います.

例えば, [g999999@hostname dirname] $ という形のプロンプトを使う場合には

promptPS1="[\u@\h \W]\\$ " return2

とします.

csh 系シェルの場合

csh や tcsh においては環境変数を設定するコマンドは export ではなく setenv となります.

promptsetenv LANG ja_JP.eucJP return2

として環境変数を設定します.

また,シェル変数の設定は set コマンドを用います.

promptset path=($path $HOME/bin) return2

csh や tcsh で用いられるシェル変数 path は,環境変数 PATH と連動します.