環境変数
環境変数の勉強をば。
自分は今現在PATHぐらいしか知らないし、おそらく過去にそれ以上の環境変数をいじった記憶は…無い。
せめて、どの項目が何を指しているのかぐらい覚えておきたいので、大事そうな奴だけここでまとめておく。
環境変数を見る方法
setかprintenvで見ることができる。
ただし、setコマンドの場合は、シェル変数も含まれるので環境変数だけ見たい場合にはprintenvで見ることを推奨。
% printenv | sort COLORTERM=gnome-terminal COMPIZ_CONFIG_PROFILE=ubuntu 〜〜〜 省略 〜〜〜
順番を指定するオプションは無いので、行単位で出力してくれるsortコマンドにパイプで渡すと見やすくて良い。
特定の環境変数だけ見たい場合は、引数に指定すると見ることができる。
% printenv HOME USER /home/bob bob
またはechoコマンドを使っても見ることができる。
それぞれの環境変数は「$環境変数名」で参照できる。
% echo "HOME: $HOME\nUSER: $USER" HOME: /home/bob USER: bob
設定方法
exportコマンドは、シェル変数を環境変数に昇格させることができる。
シェル変数だけだと、子プロセスで値を参照することはできないが、
それを環境変数にすることで、そのシェルで実行される子プロセスは全てその変数を参照することが可能になる。
ちなみにシェルを閉じるとそのexportで設定した環境変数も破棄される。
設定してみた例を以下に示す。
% TEST=123 % echo $TEST 123 % zsh (新しくzshを起動) % echo $TEST (空) %exit (子プロセスのzshを閉じる) % export TEST % printenv TEST 123 % zsh (新しくzshを起動) % ecoh $TEST 123
環境変数の中身
じゃあ実際にそれぞれの環境変数が何を担っているのかを書いていく。
PATH
プログラムの置いてあるディレクトリ名の指定。
頭から順に該当するプログラムが置いてあるかどうか調べていくので、
もし同名のプログラムが複数ある場合には、その順序に気を付ける必要がある。
もしPATHの中で同名のプログラムが複数ある場合には、whereコマンドで調べることができる。
% where test /usr/bin/test /usr/local/bin/test
HOME
ホームディレクトリ。
シェルが起動したときのカレントディレクトリであり、
引数なしでcdしたときに移動するディレクトリ。
LANG
使用言語の指定。
C ja japanese ja_JP.EUC ja_JP.JIS ja_JP.SJIS ja_JP.PCK
などがある。
自分のUbuntuの環境ではja_JP.UTF_8だった。
LANGUAGE
GNU独自の環境変数で、複数の言語を:で繋いで指定できる。
非標準のものらしく、「第一希望:第二希望」のように記述する。
% printenv LANGUAGE ja:en
となっていたので、第一希望を日本語、第二希望を英語としている様子。
PWD
カレントディレクトリ名
cdで移動するたびに書き換わる。
終わりに
とりあえず環境変数の見方、設定方法と、代表的な環境変数に付いて触れた。
自分の環境でprintenvで見る限り、まだまだ全然あるのが恐ろしい。
manコマンドのように環境変数のマニュアルというものを見ることはできないものか…。
参考資料
環境変数マニュアル, http://x68000.q-e-d.net/~68user/unix/environment.html.
さんすけ unix 参考書(UNIX その他/2 環境変数), http://www5b.biglobe.ne.jp/~sgi/unix/unixA/ux502.html.
IPA ISEC セキュア・プログラミング講座:C/C++言語編 第8章 入力検査:環境変数の検査とリセッ, http://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/c703.html.