環境変数
出典: フリー百科事典『ウィキペディア(Wikipedia)』
環境変数とは、コンピュータのプロセスに対して、外部から情報を与えたり設定を行ったりする仕組みのことである。
目次 |
[編集] 概要
環境変数は、UNIX(互換OSや互換環境も含む)、MS-DOS、Windowsに存在する。
一つの環境変数は、変数名とその値をもち、通常「変数名=値」と表記する。 変数名は英数字とアンダースコアで構成される。 値は一般的にはとくに型や構造は定義されておらず、単なる文字列である(ただし、特定の環境変数は、それを解釈するプログラムによって値の構造が規定されていることがある)。
環境変数は、各プロセスに付随するデータである。一つのプロセスが複数の環境変数をもつことができる。 あるプロセスに付随している環境変数の総体のことを、環境ということがある。 プロセスは、任意に環境変数を参照して、各種の情報を取得したり、動作を変更したりすることができる。 また、プロセスは、自分の環境において、環境変数を新規に作成したり、既存の環境変数の値を変更したり、環境変数を削除したりできる。
環境変数には、システムにより定義されるものとユーザが任意に定義するもの、ほとんどのプログラムに影響を与えるものと特定のプログラムにのみ影響を与えるものがある。
環境は、親プロセスから子プロセスに複製されて継承される。 すなわち、子プロセスで環境を変更しない限り、子プロセスの環境は親プロセスのそれと同一の内容である。 また、子プロセスが自分の環境に対して行った変更は、親プロセスの環境に影響しない。
Cプログラムにおいては、main()関数の第3引数(慣習的にenvpという仮引数名である)で環境を参照することができる。ただしこれはISO/ANSIの標準規格で規定されているものではなく、通常はより簡便なgetenv()関数などが使われる。
[編集] UNIXの環境変数
UNIXのシェルコマンドやシェルスクリプトにおいて、環境変数の値は「$環境変数名」という書式で参照する。
[編集] 環境変数の設定法
環境変数を設定する方法はシェルにより異なる。
- shの場合
$ VAR=value $ export VAR
- cshの場合
% setenv VAR value
- bashの場合
$ export VAR=value
[編集] 環境変数の例
- COLUMNS, LINES
- キャラクタ端末の桁数と行数を指定する。termcap/terminfo/cursesなどを利用したプログラムで利用される。他の方法(termcap、sttyなど)によって指定されていない場合に有効。
- EDITOR
- エディタのコマンド名を指定する。エディタを起動するプログラム(mail、lessなど)で参照される。
- HOME
- ホームディレクトリを指定する。cdコマンドで引数を指定しない場合、このディレクトリに移動する。例: /home/$USER
- LANG
- ロケールを指定する。日本語ロケールの場合はjaまたはja_JPなどを指定する。setlocale()関数の呼び出しにより有効となる。
- LESSCHARSET
- lessの入力・出力文字コードを指定する。
- メールボックスのパス名を指定する。例: /var/mail/$USER, /usr/spool/mail/$USER
- NAME
- ユーザの名前を指定する。メール送信時などに使われる。
- PAGER
- ページャ(more、less、pgなど)を指定する。ページャを起動するプログラム(manなど)で使われる。
- PATH
- コマンド検索パスをコロンで区切って指定する。シェルが参照する。
- PWD
- カレントディレクトリが設定される。シェルスクリプトでpwdコマンドの代わりに$PWDを参照することがある。
- SHELL
- 現在のシェルの起動パスが設定される。シェルを確認するのに利用できる。例: /bin/sh
- TERM
- 端末種別が設定される。この値をキーとしてtermcap/terminfoデータベースが検索される。例: vt100
- TERMCAP
- termcapデータベースファイルのパス、あるいは検索されたデータベースエントリの内容が設定される。例: /etc/termcap
- TERMINFO
- terminfoデータベースディレクトリのパスが設定される。例: /usr/share/misc/terminfo
- TZ
- タイムゾーン情報を指定する。標準Cライブラリの日時関連の関数で参照される。例: JST-9
- USER
- ログイン名が設定される。
- VISUAL
- スクリーンエディタのコマンド名を指定する。EDITORと同様。
[編集] シェル変数
UNIXのシェル(UNIX以外の環境に移植されたものも含む)には、シェル変数という概念がある。 環境変数と類似しているが、シェル内で独自に保持しているものであり、シェル以外のプロセスには存在しない。
[編集] MS-DOSの環境変数
MS-DOSのコマンドラインやバッチファイルにおいて、環境変数の値は「%変数名%」という書式で参照する。
[編集] 環境変数の設定法
コマンドラインやバッチファイル内で以下のように設定する。
set VAR=value
起動時から有効にするためには、AUTOEXEC.BATに記述する。
[編集] 環境変数の例
MS-DOSでは標準的に規定されている環境変数は非常に少ない。
- COMSPEC
- シェル (COMMAND.COM) のパス名が設定される。CONFIG.SYSのSHELL=行の記述が反映される。例: C:\COMMAND.COM
- INCLUDE
- Cのヘッダファイルのパスを指定する。MS-Cなどが参照する。
- LIB
- Cのライブラリファイルのパスを指定する。MS-Cなどが参照する。
- PATH
- コマンド検索パスをセミコロンで区切って指定する。シェルが参照する。
- PROMPT
- コマンドプロンプトの形式を指定する。例: $p$g
- TEMP
- 一時ファイルを置くディレクトリを指定する。例: C:\TEMP
[編集] Windowsの環境変数
[編集] 環境変数の設定法
MS-DOSと同様の方法の他、コントロールパネルでも設定することができる。 コントロールパネルで設定したものは、それ以降起動されるプロセスで有効となる。また、再起動後も有効。
コントロールパネルの設定は、システム環境変数とユーザー環境変数に分かれている。 コントロールパネルでシステム環境変数を変更するには、管理者権限が必要。
"path"あるいは"set"コマンドは、そのコマンドを実行したプロンプト上でしか有効ではないため注意が必要である。
[編集] 環境変数の例
Windows NT系の例を示す。Windows 9x系では存在しないものもある。
- COPYCMD
- COPYコマンドのスイッチを指定する。
- COMPUTERNAME
- コンピュータ名が設定されている。
- CPU, NUMBER_OF_PROCESSORS, PROCESSOR_ARCHITECTURE, PROCESSOR_IDENTIFIER, PROCESSOR_LEVEL, PROCESSOR_REVISION
- コンピュータのプロセッサに関する情報が設定されている。
- DIRCMD
- DIRコマンドのスイッチを指定する。
- HOMEDRIVE
- ホームフォルダのドライブ名が設定されている。例: C:
- HOMEPATH
- ホームフォルダのパス名が設定されている。例: \Documents and Settings\%USERNAME%
- OS
- OSの種類が設定されている。例: Windows_NT
- PATH
- MS-DOSと同じ。
- PATHEXT
- 実行可能ファイルの拡張子をコロンで区切って指定する。例: .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
- PROMPT
- MS-DOSと同じ。
- ProgramFiles
- Program Filesフォルダのパス名が設定されている。例: C:\Program Files
- SystemDrive
- システムドライブ名が設定されている。例: C:
- SystemRoot
- Windowsフォルダのパス名が設定されている。例: C:\WINDOWS
- USERDOMAIN
- 現在のユーザのログオンドメインが設定されている。ドメインのない環境ではローカルコンピュータにログオンするためCOMPUTERNAMEと同じになる。
- USERNAME
- 現在のユーザのユーザ名が設定されている。
- USERPROFILE
- 現在のユーザのユーザプロファイルフォルダのパス名が設定されている。例: C:\Documents and Settings\%USERNAME%
- TEMP
- MS-DOSと同じ。例: C:\Documents and Settings\%USERNAME%\Local Settings\Temp
- WINDIR
- Windowsフォルダのパス名が設定されている。例: C:\WINDOWS
[編集] CGIにおける環境変数
WebブラウザなどのHTTPユーザーエージェントがサーバにアクセスする際、HTTPリクエストヘッダに各種の情報を含めて送信する。 要求されたリソースがCGIである場合、サーバはHTTPリクエストヘッダの情報や、アクセス元のIPアドレスなどの情報を環境変数に設定してCGIプログラムを起動することが一般的である。 HTTPリクエストヘッダの情報は、ヘッダフィールド名に対応した環境変数で渡される。
情報 | リクエストヘッダ | 環境変数 |
---|---|---|
クライアントのIPアドレス | なし | REMOTE_ADDR |
クライアントの逆引きホスト名 | なし | REMOTE_HOST |
クライアントのTCPポート番号 | なし | REMOTE_HOST |
ユーザーエージェントが受理するMIMEメディアタイプ | Accept: | HTTP_ACCEPT |
ユーザーエージェントが受理する文字コード | Accept-Charset: | HTTP_ACCEPT_CHARSET |
ユーザーエージェントが受理する言語 | Accept-Language: | HTTP_ACCEPT_LANGUAGE |
サーバのホスト名 | Host: | HTTP_HOST |
ユーザーエージェントのリファラー | Referer: | HTTP_REFERER |
ユーザーエージェントの名称 | User-Agent: | HTTP_USER_AGENT |
この仕組みを指して、俗に「ブラウザが環境変数を吐く」などということがあるが、これは正しい表現ではない。 ユーザーエージェントがCGIプログラムに対して環境変数を送っているわけではなく、サーバがCGIプログラムに対して環境変数を設定しているにすぎないためである。