環境変数について

環境変数について – qazqaz note環境変数は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″ /]

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください