環境変数はOSが提供するデータ共有機能の一つ。OS上で動作するプロセスがデータを共有するための仕組み。プロセスに対して外部からデータを与え、プロセスの挙動・設定を変更する際に用いる。環境変数には、システムにより定義されるものとユーザが任意に定義するものがある。慣例として環境変数名には大文字を使う(シェル変数には小文字を使う)。
設定されている環境変数の表示
printenvコマンドを使用する。
xxxxxx@yyyyyy:~> printenv LESSKEY=/etc/lesskey.bin NNTPSERVER=news INFODIR=/usr/local/info:/usr/share/info:/usr/info MANPATH=/usr/local/man:/usr/local/share/man:/usr/share/man:/usr/X11R6/man:/opt/gnome/share/man:/usr/local/pgsql/man HOSTNAME=yyyy GNOME2_PATH=/usr/local:/opt/gnome:/usr XKEYSYMDB=/usr/X11R6/lib/X11/XKeysymDB HOST= TERM=xterm SHELL=/bin/bash PROFILEREAD=true HISTSIZE=1000 SSH_CLIENT=aaa.bbb.ccc.ddd eee ff SSH_TTY=/dev/pts/1 GROFF_NO_SGR=yes USER=xxxxxx LS_COLORS=no=00:fi=00:di=01;34:ln=00;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31:ex=00;32:*.cmd=00;32:*.exe=01;32:*.com=01;32:*.bat=01;32:*.btm=01;32:*.dll=01;32:*.tar=00;31:*.tbz=00;31:*.tgz=00;31:*.rpm=00;31:*.deb=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.zoo=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.tb2=00;31:*.tz2=00;31:*.tbz2=00;31:*.avi=01;35:*.bmp=01;35:*.fli=01;35:*.gif=01;35:*.jpg=01;35:*.jpeg=01;35:*.mng=01;35:*.mov=01;35:*.mpg=01;35:*.pcx=01;35:*.pbm=01;35:*.pgm=01;35:*.png=01;35:*.ppm=01;35:*.tga=01;35:*.tif=01;35:*.xbm=01;35:*.xpm=01;35:*.dl=01;35:*.gl=01;35:*.wmv=01;35:*.aiff=00;32:*.au=00;32:*.mid=00;32:*.mp3=00;32:*.ogg=00;32:*.voc=00;32:*.wav=00;32: LD_LIBRARY_PATH=:/usr/local/mysql/lib/mysql:/usr/local/pgsql/lib POSTGRES_INCLUDE=/usr/local/pgsql/include PGLIB=/usr/local/pgsql/lib XNLSPATH=/usr/X11R6/lib/X11/nls HOSTTYPE=i386 SSH_AUTH_SOCK=/tmp/ssh-VRWNU20036/agent.20036 FROM_HEADER= PAGER=less XDG_CONFIG_DIRS=/usr/local/etc/xdg/:/etc/xdg/:/etc/opt/gnome/xdg/ MINICOM=-c on MAIL=/var/mail/xxxxxx PATH=/usr/local/bin:/usr/bin:/usr/X11R6/bin:/bin:/usr/games:/opt/gnome/bin:/usr/lib/mit/bin:/usr/lib/mit/sbin:/usr/local/mysql/bin:/usr/local/mysql/libexec:/usr/local/pgsql/bin CPU=i686 INPUTRC=/etc/inputrc PWD=/virtual/xxxxxx LANG=en_US.UTF-8 PYTHONSTARTUP=/etc/pythonstart TEXINPUTS=:/virtual/qazqaz/.TeX:/usr/share/doc/.TeX:/usr/doc/.TeX SHLVL=1 HOME=/virtual/xxxxxx LESS_ADVANCED_PREPROCESSOR=no OSTYPE=linux LS_OPTIONS=-N --color=tty -T 0 WINDOWMANAGER= GTK_PATH=/usr/local/lib/gtk-2.0:/opt/gnome/lib/gtk-2.0:/usr/lib/gtk-2.0 LESS=-M -I MACHTYPE=i686-suse-linux LOGNAME=xxxxxx CVS_RSH=ssh XDG_DATA_DIRS=/usr/local/share/:/usr/share/:/etc/opt/kde3/share/:/opt/kde3/share/:/opt/gnome/share/ ACLOCAL_FLAGS=-I /opt/gnome/share/aclocal SSH_CONNECTION=aaa.bbb.ccc.ddd eee fff.ggg.hhh.iii jjj PGDATA=/usr/local/pgsql/data PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig:/opt/kde3/lib/pkgconfig:/opt/gnome/lib/pkgconfig:/opt/gnome/lib/pkgconfig:/opt/gnome/share/pkgconfig LESSOPEN=lessopen.sh %s INFOPATH=/usr/local/info:/usr/share/info:/usr/info:/opt/gnome/share/info POSTGRES_LIB=/usr/local/pgsql/lib LESSCLOSE=lessclose.sh %s %s G_BROKEN_FILENAMES=1 COLORTERM=1 _=/usr/bin/printenv
特定の環境変数の値のみ表示するには、printenvコマンドの引数に環境変数名を指定する。
xxxxxx@yyyyyy:~> printenv HOME /virtual/xxxxxx
環境変数の設定
環境変数を設定する方法はシェルにより異なる。
shの場合
$ VAR=value $ export VAR
cshの場合
% setenv VAR value
bashの場合
[/text] $ export VAR=value
[/text]
環境変数の削除
# unset VAR # printenv VAR (削除されたため表示されない)
コマンドラインやシェルスクリプトから環境変数を参照、
「$環境変数名」とします。
% echo $HOME /virtual/xxxxxx
環境変数の影響範囲
環境変数の値は自分のログインセッション全体に適用される。つまり環境変数はシェル変数と違って子プロセスに引き継がれる。自分が実行する特定のプログラムからも参照できる。ただし、子プロセスが設定した環境変数は親プロセスには影響を与えないし、全く無関係のプロセス(親子の関係にないプロ セス)にも反映されない。
# export VAR=aaa // 環境変数VARの値にaaaを設定 # printenv VAR // 環境変数VARの値を表示 VAR=aaa // 設定した値aaaが表示された # bash // 新しいシェルを起動して子プロセスを作成 # printenv VAR // 子プロセスの環境変数VARの値を表示 VAR=aaa // 親プロセスの環境変数は子プロセスに引き継がれるため値aaaが表示 # export VAR=bbb // 子プロセスの環境変数VARの値にbbbを設定 # printenv VAR // 子プロセスの環境変数VARの値を表示 VAR=bbb // 設定した値bbbが表示された # exit // 子プロセスの終了。親プロセスのシェルに戻る。 exit # printenv VAR // 環境変数VARの値を表示 VAR=aaa // 子プロセス作成前に設定した値aaaが表示された。 // 子プロセスで設定した値bbbが親プロセスには影響していない
主な環境変数
- HOME: ホームディレクトリの絶対パス。(例: /virtual/xxxxxx) 引数なしでcdを実行したときに移動するディレクトリ。
- USER: 自分のログイン名。(例: xxxxxx)
- SHELL: 現在使用しているシェルの絶対パス。(例: /usr/local/bin/bash)
- PATH: 入力されたコマンドの実行ファイルを検索する場所。(例: /sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/virtual/xxxxxx/bin)
- PWD: カレントディレクトリ名。(例: /virtual/xxxxxx/test)
- TERM: 端末(ターミナル)の種類。(例: xterm)端末には文字を表示するだけでなく、1文字戻ったり、1行削除したり、画面をクリアするなどの機能がある。これらはそれぞれ特殊なコードが割り当てられており、これをエスケープシーケンスと呼ぶ。viやemacs等では、1文字戻ったり画面をクリアする際、このエスケープシーケンスを出力している。しかしエスケープシーケンスは端末の種類によって違うので、ユーザが今どの種類の端末を利用しているのか環境変数TERMを参照して調べている。そのため、環境変数TERMが設定されていない状態ではviやemacsは正常に動作しない。
- PAGER: 標準ページャ。(例: more)manなどを実行したとき、環境変数PAGERに設定されているプログラムがページャとして実行される。
- EDITOR: 標準エディタ。(例: vi)あるプログラムで自動的にエディタを起動してユーザにファイルの編集をさせるような場合に、環境変数EDITORに設定されているプログラムがエディタとして起動する。vipw、crontab、cvs、less などが参照する。
- LANG: 使用言語の指定。ロケールとも言う。(例: ja_JP.eucJPやja_JP.UTF-8)
ロケールを日本語に設定した場合のdateコマンドの表示の変化。
xxxxxx@yyyyyy:~> date // 普通にdateコマンドを実行すると Sat Apr 16 01:03:43 JST 2011 // 英語で現在日時が表示される xxxxxx@yyyyyy:~> export LANG=ja_JP.UTF-8 // 環境変数LANGに日本語を設定してから xxxxxx@yyyyyy:~> date // dateコマンドを実行すると 2011年 4月 16日 土曜日 01:06:34 JST // 日本語で現在日時が表示される[amazon asin=”4534037945″ /]
コメントを残す
コメントを投稿するにはログインしてください。