コンテンツにスキップ

「環境変数」の版間の差分

提供: ArchWiki
削除された内容 追加された内容
環境変数の例: 未訳部を翻訳
AshMyzk (トーク | 投稿記録)
リンクを修正
 
(8人の利用者による、間の101版が非表示)
2行目: 2行目:
[[de:Umgebungsvariablen]]
[[de:Umgebungsvariablen]]
[[en:Environment variables]]
[[en:Environment variables]]
[[es:Environment variables]]
[[hu:Environment variables]]
[[pt:Environment variables]]
[[ru:Environment variables]]
[[ru:Environment variables]]
[[zh-cn:Environment variables]]
[[zh-hans:Environment variables]]
{{Related articles start}}
環境変数とは1つ、または複数のアプリケーションによって使用されるデータを含んだ名前付きオブジェクトです。簡単に言えば、名前と値がある変数です。環境変数の値は例えば、実行可能ファイルのファイルシステムにおける場所や使用するデフォルトのエディタ、システムロケールの設定などになります。Linux に慣れてないユーザーは、環境変数で設定をするのは御しがたいと考えがちですが、複数のアプリケーションと Linux のプロセスの設定を共有するシンプルな方法として環境変数が存在しています。
{{Related|デフォルトアプリケーション}}
{{Related|systemd/ユーザー#環境変数}}
{{Related articles end}}
環境変数は、1つ以上のアプリケーションによって使用されるデータを含む名前付きのオブジェクトです。簡単に言えば、名前と値を持つ変数です。環境変数の値には、例えばファイルシステム内のすべての実行可能ファイルの場所、使用すべきデフォルトのエディタ、またはシステムロケールの設定などが含まれます。Linux に不慣れなユーザーは、このような設定の管理方法を少し扱いづらいと感じることがよくあります。しかし、環境変数は、複数のアプリケーションやプロセス間で設定を共有する簡単な方法を提供します。


== ユーティリティ ==
== ユーティリティ ==

{{Pkg|coreutils}} パッケージには ''printenv'' と ''env'' というプログラムが入っています。現在設定されている環境変数とその値を表示するには:
{{Pkg|coreutils}} パッケージには {{man|1|printenv}} と {{man|1|env}} というプログラムが含まれています。現在の環境変数とその値を一覧表示するには:


$ printenv
$ printenv


{{Note|環境変数の中にはユーザ個別のものも存在します。''printenv'' の出力を非特権ユーザ''root'' で比較してください。}}
{{Note|環境変数の中にはユーザ個別のものも存在します。{{ic|printenv}} の出力を非特権ユーザの場合と root ユーザの場合で比較して確認しみましょう。}}


{{ic|env}} ユーティリティを使うことで環境変数を変更してコマンドを実行することができます。以下の例では環境変数 {{ic|EDITOR}} を {{ic|vim}} に設定して ''xterm'' を起動します。以下のコマンドを実行してもグローバルな環境変数 {{ic|EDITOR}} に影響与えません。
''env'' ユーティリティを使うことで環境変数を変更してコマンドを実行することができます。以下の例では環境変数 {{ic|EDITOR}} を {{ic|vim}} に設定して ''xterm'' を起動します。以下のコマンドを実行してもグローバルな {{ic|EDITOR}} 変数影響与えません。


$ env EDITOR=vim xterm
$ env EDITOR=vim xterm


[[Bash]] 組み込まれている ''set'' はシェルオプションの値を変更したり、位置のパラメータを設定したり、シェル変数の名前値を表示することができます。詳しくは、''set'' のドキュメントを見て下さい: [http://www.gnu.org/software/bash/manual/bash.html#The-Set-Builtin]
[[シェル]] の {{man|1p|set}} 組み込みコマンドを使えば、シェルオプションの値を変更したり、位置のパラメータを設定したり、シェル変数の名前とその値を出力したりできます。


特定のプロセスで使われている環境変数を確認したい場合は、{{ic|/proc/${PID}/environ}} を見下さい。このファイルには特殊な {{ic|\x0}} 文字が含まれています。次の関数を使うことでファイルを解析できます。
プロセスはその環境変数を {{ic|/proc/$PID/environ}} ファイルに保存しています。このファイルには、ヌル文字 ({{ic|\x0}}) で区切られたキーと値のペアが含まれています。[[sed]] を使用する、より読み易い形式取得できます。例: {{ic|sed 's:\x0:\n:g' /proc/$PID/environ}}


== 変数の定義 ==
# envof() { sed 's/\x0/\n/g' /proc/${1}/environ; }
# envof 1
TERM=linux


環境を不必要に汚染しないために、変数のスコープを制限するように努めるべきです。実際、グラフィカルセッションや systemd サービスでは、変数を有効にするために特定の場所で設定することが要求されます。環境変数のスコープは、それらが影響を与えるコンテキストに分けられます:
== サンプル ==
以下のセクションでは Linux システムで一般的に使われている環境変数を並べており、それぞれの値について説明しています。


* [[#グローバル|グローバル]]: あらゆるユーザが実行する全プログラム。Systemd サービスは含まれません。
*{{ic|DE}} は使用しているデスクトップ環境 (''D''esktop ''E''nvironment) を示します。[[xdg-open]] はこの環境変数を使ってデスクトップ環境に含まれているユーザーフレンドリーなファイルオープナアプリケーションを選択します。この機能を使うにはインストールする必要があるパッケージが存在します。[[GNOME]] の場合、{{pkg|libgnome}} が必要です。[[Xfce]] の場合、{{pkg|exo}} が必要です。使用される {{ic|DE}} 変数の値: {{ic|gnome}}, {{ic|kde}}, {{ic|xfce}}, {{ic|lxde}}, {{ic|mate}}。
* [[#ユーザーごと|ユーザ別]]: 特定のユーザが実行する全プログラム。Systemd ユーザサービス ([[systemd/ユーザー#環境変数]] を参照) やグラフィカルアプリケーション ([[#グラフィック環境]] を参照) は含まれません。


=== グローバル ===
:{{ic|DE}} 環境変数はウィンドウマネージャを起動する前にエクスポートする必要があります。例:


==== シェルの初期化ファイルを使う ====
{{hc|~/.xinitrc|2=
export DE="xfce"
exec openbox
}}


大半の Linux ディストリビューションは、あなたに {{ic|/etc/profile}} 等のファイルに環境変数の追加・変更を行うよう指示します。また、{{ic|/etc/locale.conf}} のような変数設定を含むパッケージ固有の設定ファイルがあることも覚えておいてください。環境変数の維持・管理は必ず行い、環境変数を含むことができる多数のファイルに注意を払うようにしてください。原則的に、あらゆるシェルスクリプトは環境変数の初期化に使うことができますが、以下のような UNIX の慣例に従い特定のファイルでのみ行われるべきです。
:上記の設定をすると、Xfce の中で実行されていると認識され ''xdg-open'' がユーザーフレンドリーな ''exo-open'' を使うようになります。設定したいときは ''exo-preferred-applications'' を使って下さい。


以下のファイルは、システムのグローバルな環境変数を定義するために使用できますが、それぞれに異なる制限があります:
*{{ic|DESKTOP_SESSION}} は {{ic|DE}} と似ていますが、[[LXDE]] デスクトップ環境で使われています: {{ic|DESKTOP_SESSION}} が {{ic|LXDE}} に設定されている場合、''xdg-open'' は ''pcmanfm'' のファイル関連付けを使います。


* {{ic|/etc/environment}} は [[#pam_env を使う|pam_env モジュール]]によって使用され、シェルに依存しないため、スクリプトやグロブ展開は使用できません。このファイルは、{{ic|1=''変数=値''}} という形式しか受け入れません。
*{{ic|PATH}} はコロンで区切られたディレクトリのリストで、システムが実行ファイルを探す対象となります。通常のコマンド(例: ''pacman'', ''systemctl'' など)をシェルに打ち込むと、このリストにあるディレクトリから同じ名前の実行ファイルが探され、そして実行されます。{{ic|PATH}}に含まれないディレクトリ下のものを実行するには、実行ファイルへの絶対パスが必要です: {{ic|/usr/bin/pacman}}
* {{ic|/etc/profile}} は、ログインシェル''のみ''に対して変数を初期化します。しかし、このファイルはスクリプト (例: {{ic|/etc/profile.d/}} 内にあるファイル) を実行し、すべての [[wikipedia:ja:Bourne Shell|Bourne shell]] 互換シェルで使用することができます。
* シェル固有の設定ファイル - [[シェル]]のグローバルな設定ファイルで、変数の初期化やスクリプトの実行を行います。例えば [[Bash#設定ファイル]] (例: {{ic|~/.bashrc}})) や [[Zsh#スタートアップ/シャットダウン ファイル]] (例: {{ic|~/.zshrc}}) です。


以下の Bash ヘルパ関数を使えば、複数のディレクトリを {{ic|PATH}} 環境変数に末尾追加することができます。環境変数を定義しているファイル ({{ic|~/.bashrc}} など) の戦闘にこの関数を追加してください。この関数は、ファイルシステム上に実際に存在するディレクトリのみを追加し、重複するエントリは作成しません。
{{Note|ユーザが悪意のあるプログラムを実行してしまう可能性があるため、セキュリティ上の理由から {{ic|PATH}} に現在のワーキングディレクトリ {{ic|.}} を含めないことを推奨します。}}


{{bc|<nowiki>
*{{ic|HOME}} は現在のユーザのホームディレクトリが入ります。この変数は、アプリケーションが現在のユーザに関連した設定ファイル等を見つけるために使われます。
add_paths() {
for d in "$@"; do
[[ -d "$d" && ! "$PATH" =~ (^|:)$d(:|$) ]] && PATH="$PATH:$d"
done
}


add_paths ~/bin ~/scripts
*{{ic|PWD}} にはワーキングディレクトリのパスが入ります。
</nowiki>}}


ほとんどのシェル (Bash、Zsh、[[fish]] を含む) では、{{ic|export}} コマンドを使って環境に変数を追加することができます。これにより、{{ic|~/my-environment.sh}} などのように通常のファイルで環境変数を定義することができます:
*{{ic|OLDPWD}} には前のワーキングディレクトリのパスが入ります。つまり最後に ''cd'' を実行する前の {{ic|PWD}} です。


{{hc|~/my-environment.sh|2=
*{{ic|SHELL}} には実行中の、インタラクティブシェルの名前が入ります。例: {{ic|bash}}。
export EDITOR=vim
export XDG_CACHE_HOME="$HOME/.cache"
export XDG_CONFIG_HOME="$HOME/.config"
export XDG_DATA_HOME="$HOME/.local/share"
export XDG_STATE_HOME="$HOME/.local/state"
}}


このファイルは、シェルのスタートアップファイルから source することができます:
*{{ic|TERM}} には実行中のターミナルの名前が入ります。例: {{ic|xterm}}。


{{hc|~/.bashrc|source ~/my-environment.sh}}
*{{ic|PAGER}} にはテキストファイルを閲覧するために使われるコマンドが入ります。例: {{ic|/bin/less}}。
{{hc|~/.config/fish/config.fish|source ~/my-environment.sh}}


==== pam_env を使う ====
*{{ic|EDITOR}} にはテキストファイルを編集するために使われる軽量なエディタのコマンドが入ります。例: {{ic|/usr/bin/nano}}。例えば、以下のようにすることで {{Xorg|X}} 環境下では ''gedit'' 、そうでなければ ''nano''を使用するようにできます。


{{man|8|pam_env}} [[PAM]] モジュールは、環境変数の設定を以下のファイルから順番にロードします: {{ic|/etc/security/pam_env.conf}} と {{ic|/etc/environment}} の順です。
export EDITOR="$(if <nowiki>[[</nowiki> -n $DISPLAY <nowiki>]]</nowiki>; then echo 'gedit'; else echo 'nano'; fi)"


{{Note|
*{{ic|VISUAL}} にはメールの編集など、作業量が多いことをするのに使う、フル機能のエディタを実行するコマンドを指定します (例: {{ic|vi}}, [[vim]], [[emacs]] など)。
* これらのファイルは、他のファイル、特に、{{ic|~/.profile}}、{{ic|~/.bash_profile}}、{{ic|~/.zshenv}} より前に読み込まれます。
* 非推奨の {{ic|~/.pam_environment}} はもう読み込まれません。{{Bug|68945}} を参照してください。
}}


{{ic|/etc/environment}} では、{{ic|1=''変数''=''値''}} というペアを1行に1つずつ記述しなければなりません。例:
*{{ic|MAIL}} には受信したメールの保存場所が入ります。一般的な設定は {{ic|/var/spool/mail/$LOGNAME}} です。


{{hc|/etc/environment|2=
*{{ic|BROWSER}} にはウェブブラウザのパスを指定します。インタラクティブシェルの設定ファイルで以下のように設定することで、[[Xorg|X]] など、グラフィカル環境が存在するかどうかで動的にウェブブラウザを変更することが可能です:
EDITOR=nano
}}


{{ic|/etc/security/pam_env.conf}} は以下の形式で記述します:
if <nowiki>[</nowiki> -n "$DISPLAY" <nowiki>]</nowiki>; then
export BROWSER=firefox
else
export BROWSER=links
fi


{{hc|/etc/security/pam_env.conf|2=
*{{ic|ftp_proxy}} と {{ic|http_proxy}} にはそれぞれ FTP と HTTP プロキシサーバーを記述します:
VARIABLE [DEFAULT=''value''] [OVERRIDE=''value'']
ftp_proxy="<nowiki>ftp://192.168.0.1:21</nowiki>"
}}
http_proxy="<nowiki>http://192.168.0.1:80</nowiki>"


{{ic|@{HOME} }} と {{ic|@{SHELL} }} は、{{ic|/etc/passwd}} で定義されているものに拡張される特別な変数です。次の例は、{{ic|HOME}} 環境変数を別の変数に展開する方法を示しています:
*{{ic|MANPATH}} には ''man'' が man ページを探すときに使うコロン区切りのディレクトリのリストが入ります。


{{hc|/etc/security/pam_env.conf|2=
{{Note|{{ic|/etc/profile}} に "Man is much better than us at figuring this out" (man は我々よりずっとうまくこれを解決する) と書いてあるとおり、一般的にこの変数はデフォルトのままにしておくべきです。例: {{ic|/usr/share/man:/usr/local/share/man}}
XDG_CONFIG_HOME DEFAULT=@{HOME}/.config
}}
}}


{{Note|変数 {{ic|${HOME} }} および {{ic|${SHELL} }} は、{{ic|HOME}} および {{ic|SHELL}} 環境変数にはリンクされていません。これらはデフォルトでは設定されていません。}}
*{{ic|INFODIR}} には ''info'' コマンドが info ページを探す際に使うコロン区切りのディレクトリのリストが入ります。 例: {{ic|/usr/share/info:/usr/local/share/info}}


また、この形式では、{{ic|${''VARIABLE''} }} を使って、既に定義されている変数を他の変数の値で展開することができます。例えば:
*{{ic|TZ}} はユーザ別にシステムと違うタイムゾーンを指定するために使うことができます。{{ic|/usr/share/zoneinfo/}} に記載されているタイムゾーンを参考にしてください。 例: {{ic|1=TZ="/usr/share/zoneinfo/Pacific/Fiji"}}


GOPATH DEFAULT=${XDG_DATA_HOME}/go
== 変数の定義 ==


{{ic|1=''VARIABLE''=''value''}} のペアも可能ですが、これらのペアでは変数の展開はサポートされていません。詳しくは {{man|5|pam_env.conf}} を参照してください。
[[Systemd/ユーザー#環境変数]]も見て下さい。


=== グロバル ===
=== ザーごと ===


環境変数をグローバルに定義したくないという時もあるでしょう。例えば、{{ic|PATH}} に {{ic|/home/my_user/bin}} を追加したいが、システム上の他のユーザーには同じ {{ic|PATH}} を使って欲しくないという場合が考えられます。様々なファイルを使うことでローカルに環境変数を定義することができます:
Most Linux distributions tell you to change or add environment variable definitions in {{ic|/etc/profile}} or other locations. Be sure to maintain and manage the environment variables and pay attention to the numerous files that can contain environment variables. In principle, any shell script can be used for initializing environmental variables, but following traditional UNIX conventions, these statements should be only be present in some particular files.


* [[シェル]]のユーザ設定ファイル。例えば、[[Bash#設定ファイル]] や [[Zsh#スタートアップ/シャットダウン ファイル]]。
The following files should be used for defining global environment variables on your system: {{ic|/etc/profile}}, {{ic|/etc/bash.bashrc}} and {{ic|/etc/environment}}. Each of these files has different limitations, so you should carefully select the appropriate one for your purposes.
** あなたが開くターミナル (例: コマンドラインアプリケーションのみ) に変数のスコープを制限しない限り、ログインシェルの変数も変更されます。
* [[systemd/ユーザー#環境変数|systemd ユーザ環境変数]]は {{ic|~/.config/environment.d/*.conf}} から読み込まれます。


ローカルで使用するディレクトリを {{ic|PATH}} に追加するには、{{ic|~/.bash_profile}} に次のように記述します:
*{{ic|/etc/profile}} initializes variables for login shells ''only''. It does, however, run scripts and can be used all [[wikipedia:Bourne shell|Bourne shell]] compatible shells.
*{{ic|/etc/bash.bashrc}} initializes variables for interactive shells ''only''. It also runs scripts but (as its name implies) is Bash specific.
*{{ic|/etc/environment}} is used by the PAM-env module and is agnostic to login/non-login, interactive/non-interactive and also Bash/non-Bash, so scripting or glob expansion cannot be used. The file only accepts {{ic|1=''variable=value''}} pairs.


export PATH="${PATH}:/home/my_user/bin"
In this example, we add {{ic|~/bin}} directory to the {{ic|PATH}} for respective user. To do this, just put this in your preferred global environment variable config file ({{ic|/etc/profile}} or {{ic|/etc/bash.bashrc}}):


変数をアップデートするために、再ログインするかファイルを [[source]] してください: {{ic|$ source ~/.bash_profile}}
{{bc|<nowiki>
# If user ID is greater than or equal to 1000 & if ~/bin exists and is a directory & if ~/bin is not already in your $PATH
# then export ~/bin to your $PATH.
if [[ $UID -ge 1000 && -d $HOME/bin && -z $(echo $PATH | grep -o $HOME/bin) ]]
then
export PATH=$HOME/bin:${PATH}
fi
</nowiki>}}


{{Note|dbus デーモンや systemd のユーザインスタンスは、{{ic|~/.bashrc}} などのような場所で設定された環境変数を継承しません。これはつまり、dbus によってアクティブ化されたプログラム ([[GNOME Files]] など) は、そのような変数をデフォルトで使用しないことを意味します。[[Systemd/ユーザー#環境変数]] を参照してください。}}
=== ユーザーごと ===


環境変数をグローバルに定義したくないという時もあるでしょう。例えば、{{ic|PATH}} に {{ic|/home/my_user/bin}} を追加したいがシステム上の他のユーザは同じ {{ic|PATH}} を使っ欲しくないという場合が考えらます。様々ファイルを使うこローカル環境変数を定義することができます:
{{Tip|{{ic|export -p}} を実行することで、ユーザセッション対し宣言さたグローバル環境変数とローカル環境変数をることができます。}}


==== グラフィック環境 ====
# シェルの設定ファイル、例えば [[Bash#設定ファイル]] や [[Zsh#設定ファイル]]。
# {{ic|~/.profile}} は多数のシェルによってフォールバックとして使われます。[[wikipedia:Unix_shell#Configuration_files_for_shells]] を参照。
# {{ic|~/.pam_environment}} は {{ic|/etc/environment}} のユーザー個別の設定で、PAM-env モジュールによって使われます。詳しくは {{ic|pam_env(8)}} を参照。


環境変数がグラフィカルなアプリケーションにしか影響しない場合は、グラフィカルセッション内でのみ設定することにより、その範囲を制限することができます。スコープを大きい順に並べると:
ローカルで {{ic|PATH}} にディレクトリを追加したい場合、以下のように {{ic|~/.bash_profile}} に記述します:


* [[#Xorg セッションごと]] および [[#Wayland セッションごと]] - DE を含むグラフィカルセッション全体に影響します。
export PATH="${PATH}:/home/my_user/bin"
* [[#デスクトップ環境セッションごと]] - グラフィカルセッション内で生成されたアプリケーションに影響を与えます。DE 自体にも影響を与える可能性があります。
* [[#アプリケーションごと]] - 特定のグラフィカル アプリケーションだけに影響します。


===== デスクトップ環境セッションごと =====
変数をアップデートするために、再ログインするかファイルを ''source'' してください: {{ic|$ source ~/.bash_profile}}。


一部のグラフィカル環境 (例えば [[KDE Plasma]]) は、ログイン時のシェルスクリプト実行をサポートしており、環境変数の設定に利用することができます。例としては [[KDE#自動起動]] を参照してください。
==== グラフィカルアプリケーション ====


===== Xorg セッションごと =====
GUI アプリケーションの環境変数を設定したいときは、[[xinitrc]] ([[ディスプレイマネージャ]]を使う場合 [[xprofile]]) に変数を記述することができます。例:


Xorg セッションの環境を変更する手順は、Xorg セッションの起動方法によって異なります:
{{hc|1=~/.xinitrc|2=
* ほとんどの[[ディスプレイマネージャ]]は [[xprofile]] を読み込みます。
export PATH="${PATH}:~/scripts"
* [[startx]] と [[SLiM]] は [[xinitrc]] を実行します。
export GUIVAR=value}}
* [[XDM]] は {{ic|~/.xsession}} を実行します: [[XDM#セッションの定義]] を参照して下さい。
* [[LightDM]][https://gitlab.archlinux.org/archlinux/packaging/packages/lightdm/-/blob/main/Xsession]、[[Plasma Login Manager]][https://github.com/KDE/plasma-login-manager/blob/master/data/scripts/Xsession]、[[SDDM]][https://github.com/sddm/sddm/blob/master/data/scripts/Xsession] は、ログイン シェルのスタートアップ スクリプトも読み込みます。例えば、[[bash]] の場合は {{ic|~/.bash_profile}}、[[zsh]] の場合は {{ic|~/.zprofile}} および {{ic|~/.zlogin}} です。


スクリプトの終わりはどのファイルであるかに依存し、高度な構文は使用するシェルに依存しますが、基本的な使い方は普遍的です:
=== セッションごと ===


{{hc|~/.xprofile, ~/.xinitrc, or ~/.xsession|2=
Sometimes even stricter definitions are required. One might want to temporarily run executables from a specific directory created without having to type the absolute path to each one, or editing {{ic|~/.bash_profile}} for the short time needed to run them.
...
export ''GUI_VAR''=''value''
...
}}


===== Wayland セッションごと =====
In this case, you can define the {{ic|PATH}} variable in your current session, combined with the ''export'' command. As long as you do not log out, the {{ic|PATH}} variable will be using the temporary settings. To add a session-specific directory to {{ic|PATH}}, issue:

[[Wayland]] は Xorg 関連のファイルを起動しないので、[[GDM]] と [[KDE Plasma]] は代わりに [[systemd/ユーザー#環境変数|systemd ユーザ環境変数]]を読み込みます。

{{hc|~/.config/environment.d/envvars.conf|2=
''GUI_VAR''=''value''
}}

Wayland セッションをサポートする他のディスプレイマネージャ (例: [[SDDM]]) は、まだこれを直接はサポートしていません。しかし、[[LightDM]]、[[Plasma Login Manager]]、[[SDDM]] はログインシェルのスタートアップスクリプトを Wayland セッションでも読み込みます。

[[greetd]] も {{ic|/etc/profile}} および {{ic|~/.profile}} を読み込みます。この動作は、デフォルトで有効になっている {{ic|source_profile}} 設定によって制御されます。

{{ic|~/.bash_profile}} などのスタートアップスクリプトを読み込むディスプレイマネージャを使用していて、{{ic|environment.d}} を使用したい場合、以下のように読み込むことができます:

{{hc|~/.bash_profile|
# systemd-environment-d-generator(8) を使用して環境を生成し、その変数をエクスポートする
set -o allexport
source <(/usr/lib/systemd/user-environment-generators/30-systemd-environment-d-generator)
set +o allexport
}}
{{Note|{{ic|/usr/lib/systemd/user-environment-generators}} にある他のジェネレーター、例えば {{ic|60-flatpak}} は環境変数の値を引用符で囲まない場合があります。この場合、出力は {{ic|export -- "$(/usr/lib/systemd/user-environment-generators/60-flatpak)"}} を使用して読み込む必要があります。}}

===== アプリケーションごと =====

セッション全体ではなく、特定のアプリケーションにのみ環境変数を設定するには、そのアプリケーションの ''.desktop'' ファイルを編集してください。その方法は [[デスクトップエントリ#環境変数の変更]] を参照してください。

[[Steam]] ゲームでは、起動オプションを編集することでプログラムの環境を設定することができます。[[Steam#起動オプション]] を参照してください。

=== セッションまたはシェルごと ===

時として、一時的な変数のみが必要である場合もあります。特定のディレクトリ内の実行ファイルを実行する際に一時的に絶対パスを入力する手間を省きたい場合や、一時的な短いシェルスクリプトでそのパスを使用したい場合があるでしょう。

例えば、セッション固有のディレクトリを {{ic|PATH}} に追加するには:


$ export PATH="${PATH}:/home/my_user/tmp/usr/bin"
$ export PATH="${PATH}:/home/my_user/tmp/usr/bin"

シェル固有のディレクトリのみを {{ic|PATH}} に追加するには:

$ PATH="${PATH}:/home/my_user/tmp/usr/bin"

Bash では、{{ic|PATH}} は既にデフォルトで export されているので、上記のどちらの方法を用いても、変数を上書きしない限り、変数の変更がサブプロセスから見えてしまいます。export された変数とされていない変数の違いをよりわかりやすく比較するには、以下を実行してみてください:

$ MYVAR="shell-only"
$ bash -c 'echo $MYVAR' # 何も表示されない
$ export MYVAR="session-wide"
$ bash -c 'echo $MYVAR' # 表示される。すなわち、セッション全体に反映されている

== 例 ==

以下のセクションでは Linux システムで一般的に使われている環境変数を並べており、それぞれの値について説明しています。

=== デスクトップ環境の検出 ===

; XDG_CURRENT_DESKTOP:
コロンで区切られた文字列リストを含む [[freedesktop.org]] 変数。現在の[[デスクトップ環境]]を示します[https://specifications.freedesktop.org/mime-apps-spec/latest/file.html]。活発に開発されているデスクトップ環境の標準化された値として次があります: {{ic|GNOME}}、{{ic|GNOME-Flashback}}、{{ic|KDE}}、{{ic|LXDE}}、{{ic|LXQt}}、{{ic|MATE}}、{{ic|TDE}}、{{ic|Unity}}、{{ic|XFCE}}、{{ic|EDE}}、{{ic|Cinnamon}}、{{ic|Pantheon}}、{{ic|DDE}} [https://specifications.freedesktop.org/menu-spec/latest/onlyshowin-registry.html]。
{{Tip|
* Cinnamon は、他のデスクトップ環境[https://gitlab.freedesktop.org/xdg/desktop-file-utils/-/commit/be0c630a19aa1788ef731def911770ce497d6ba3 より後に]登録されました。そのため、[[Qt]][https://github.com/qt/qtbase/blob/dev/src/gui/platform/unix/qgenericunixtheme.cpp#L156] など一部のソフトウェアは、登録前の値である {{ic|X-CINNAMON}} を期待します。
* {{ic|Hyprland}} は、[[Hyprland]] 用として非公式に認められています。
}}
; XDG_SESSION_DESKTOP:
{{ic|XDG_CURRENT_DESKTOP}} と似ていますが、単一の文字列しか許可しません。その名前にも関わらず、[https://gitlab.gnome.org/GNOME/gtk/-/issues/1224#note_270915 これは freedesktop.org によって標準化されたものではありません]。
; DE:
使用中のデスクトップ環境 (''d''esktop ''e''nvironment) を示すレガシーな変数です。どのような値を取りうるかについての中心的なドキュメントはありませんが、[[xdg-utils#環境変数|xdg-utils]] は多くのデスクトップ環境についてのリファレンスを提供しています。
; DESKTOP_SESSION:
これもレガシーな変数です。{{ic|DE}} に似ていますが、それよりは一般的ではありません。セッションの ({{ic|/usr/share/xsessions/}} 内の) [[デスクトップエントリ]]へのパスを格納できます [https://github.com/qt/qtbase/blob/6.3/src/gui/platform/unix/qgenericunixservices.cpp#L92-L107]。
; WINDOW_MANAGER:
デスクトップ環境で使用する[[ウィンドウマネージャ]]を''選択''するために時々使われる変数です。他のプログラムが読み取るために、既に選択されているディスプレイマネージャやデスクトップ環境によって設定される他の変数とは対照的です。
; DISPLAY:
ホスト、ディスプレイ、スクリーンを指定するために X Window System によって使用されます。形式は {{ic|''ホスト名'':''ディスプレイ''.''スクリーン''}} です。ディスプレイとは、共通の入力デバイス群 (キーボードやマウスなど) を共有するスクリーンの集まりを指します。ホスト名は、ディスプレイが接続されるマシンの名前を指定するためにかつて使用されていましたが、X クライアントと同じコンピュータ上で X サーバが実行される場合は空欄になっているはずです。詳細は {{man|7|X}} を参照してください。
; WAYLAND_DISPLAY:
Wayland における {{ic|DISPLAY}} のようなものです。コンポジタによって設定されます。これが設定されていない場合、アプリケーションは {{ic|wayland-0}} を使おうと試みます。
; XAUTHORITY:
{{ic|.Xauthority}} ファイルへのパスです。このファイルには、X Window Server にアクセスするための資格情報が入っています。これは、認証のために X サーバに送られるクッキー (任意のデータ) の形で保存されます (例: {{ic|MIT-MAGIC-COOKIE-1}})。

=== システムやセッションのパス ===

; HOME:
現在のユーザのホームディレクトリへのパスが格納されます。この変数は、アプリケーションが現在のユーザに関連した設定ファイル等を見つけるために使うことができます。
; PATH:
コロンで区切られたディレクトリのリストが格納されています。システムは、この変数に登録されているディレクトリから実行ファイルを探索します。通常のコマンド (''ls''、''systemctl''、''pacman'' など) がシェル (''bash'' や ''zsh'' など) によって解釈される際、シェルは {{ic|PATH}} のリスト内のディレクトリからそのコマンドと同じ名前の実行ファイルを探索し、それを実行します。{{ic|PATH}} に含まれないディレクトリにある実行ファイルを実行するには、実行ファイルへの相対パスや絶対パスを指定する必要があります。例えば、{{ic|./a.out}} や {{ic|/bin/ls}} といった形です。
{{Note|セキュリティ上の理由により {{ic|PATH}} にはカレント作業ディレクトリ ({{ic|.}}) を含めないことが推奨されます。ユーザが騙されて、悪意のあるコマンドを実行してしまうかもしれないからです。}}
; PWD:
[[Wikipedia:ja:Pwd|作業ディレクトリへのパス]]が入ります。
; OLDPWD:
前の作業ディレクトリへのパスが入ります。つまり、最後に ''cd'' を実行する前の {{ic|PWD}} です。
; MAIL:
受信したメールの保存場所が入ります。伝統的な設定は {{ic|/var/spool/mail/$LOGNAME}} です。

=== ネットワークプロキシ ===

; ftp_proxy:
FTP [[プロキシサーバー]]が入ります。
ftp_proxy="<nowiki>ftp://192.168.0.1:21</nowiki>"
;http_proxy:
HTTP [[プロキシサーバー]]が入ります。
http_proxy="<nowiki>http://192.168.0.1:80</nowiki>"

=== ドキュメントのパス ===

; MANPATH:
''man'' が man ページを探索するディレクトリのリストがコンマで区切られて格納されます。
{{Note|{{ic|/etc/profile}} に "Man is much better than us at figuring this out" (man は我々よりずっと上手くこれを解決する) と書いてあるとおり、一般的にこの変数はデフォルトのままにしておくべきです。 {{man|5|manpath}} を参照。}}
; INFODIR:
''info'' コマンドが info ページを探索するディレクトリのリストがコンマで区切られて格納されます。例: {{ic|/usr/share/info:/usr/local/share/info}}。

=== デフォルトプログラム ===

; SHELL:
ユーザの[https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/V1_chap08.html#tag_08_03 優先シェル]へのパスが含まれます。この変数の値は、現在実行中のシェルである必要はないことに注意してください。この変数に値がない場合、[[Bash]] は自動的に {{ic|/etc/passwd}} で定義されているユーザのログインシェルに設定するか、判断できない場合は {{ic|/bin/sh}} にします。
; PAGER:
ファイルの内容を一覧表示するために使用されるプログラムを実行するコマンドが含まれます。例: {{ic|/bin/less}}。
; EDITOR:
ファイルの編集に使用される軽量プログラムを実行するコマンドが含まれています (例:{{ic|/usr/bin/nano}})。例えば、以下の例のように、[[X]] 下では ''gedit'' を使い、それ以外では ''nano'' を使うように設定するインタラクティブスイッチを記述することができます:
[ -n "$DISPLAY" ] && export EDITOR=gedit || export EDITOR=nano
; VISUAL:
メールの編集などより高度な作業に使われる本格的なエディタを実行するコマンドが含まれています (例: {{ic|vi}}、[[vim]]、[[emacs]] など)。
; TERMINAL:
ユーザの優先ターミナルエミュレータを実行するコマンドが含まれます。これは、現在実行中のターミナル ({{ic|TERM}}) と同じであるとは限りません。
; BROWSER:
ウェブブラウザへのパスが含まれています。グラフィカル環境 ([[X]] など) が利用できるかに応じてこの変数を動的に変更するようなコードをインタラクティブシェルの設定ファイルに記述しておくと便利です:
[ -n "$DISPLAY" ] && export BROWSER=firefox || export BROWSER=links
{{Tip|{{ic|WAYLAND_DISPLAY}} 環境変数を使うことで、[[Wayland#コンポジタ|Wayland コンポジタ]]が実行されているかどうかに応じてこれらのデフォルトプログラムを設定することができます。}}

=== その他 ===

; TERM:
実行中のターミナル (''term''inal) の種類が格納されます (例: {{ic|xterm-256color}})。この変数は、ターミナル固有の機能を期待する、ターミナル内で実行されるプログラムによって使用されます ({{man|5|terminfo}} を参照)。この変数は、ターミナルエミュレータによって設定されるため、シェルから上書きすることは推奨されません。
; TZ:
ユーザ毎にシステムのタイムゾーンとは異なるタイムゾーンを設定するために使用することができます。{{ic|/usr/share/zoneinfo/}} 内にはタイムゾーンが列挙されているので、これをリファレンスとして使用することができます (例: {{ic|1=TZ=":/usr/share/zoneinfo/Pacific/Fiji"}})。{{ic|TZ}} 変数に zoneinfo ファイルを指定する場合、[https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html GNU マニュアル] に従ってコロンで始める必要があります。

=== シェル環境の検出 ===

シェル環境を検出するテストは、[https://gitlab.com/jdorel-documentation/shell-environment-detection シェル環境の検出に関して書かれたリポジトリ]を見てください。これには、ログイン/インタラクティブシェル、Xorg セッション、TTY、SSH セッションの検出も含まれています。


== 参照 ==
== 参照 ==


* [https://wiki.gentoo.org/wiki/Handbook:X86/Working/EnvVar/ja Gentoo Linux ドキュメント]
* [[Gentoo:Handbook:X86/Working/EnvVar]]
* [https://help.ubuntu.com/community/EnvironmentVariables Ubuntu Community Wiki - Environment Variables]
* [[デフォルトアプリケーション]]

* [[Xdg-open]]
{{TranslationStatus|Environment variables|2026-03-29|869026}}

2026年3月29日 (日) 18:32時点における最新版

環境変数は、1つ以上のアプリケーションによって使用されるデータを含む名前付きのオブジェクトです。簡単に言えば、名前と値を持つ変数です。環境変数の値には、例えばファイルシステム内のすべての実行可能ファイルの場所、使用すべきデフォルトのエディタ、またはシステムロケールの設定などが含まれます。Linux に不慣れなユーザーは、このような設定の管理方法を少し扱いづらいと感じることがよくあります。しかし、環境変数は、複数のアプリケーションやプロセス間で設定を共有する簡単な方法を提供します。

ユーティリティ

coreutils パッケージには printenv(1)env(1) というプログラムが含まれています。現在の環境変数とその値を一覧表示するには:

$ printenv
ノート 環境変数の中にはユーザ個別のものも存在します。printenv の出力を非特権ユーザの場合と root ユーザの場合で比較して確認してみましょう。

env ユーティリティを使うことで、環境変数を変更してコマンドを実行することができます。以下の例では、環境変数 EDITORvim に設定して xterm を起動します。以下のコマンドを実行しても、グローバルな EDITOR 変数には影響を与えません。

$ env EDITOR=vim xterm

シェルset(1p) 組み込みコマンドを使えば、シェルオプションの値を変更したり、位置のパラメータを設定したり、シェル変数の名前とその値を出力したりできます。

各プロセスはその環境変数を /proc/$PID/environ ファイルに保存しています。このファイルには、ヌル文字 (\x0) で区切られたキーと値のペアが含まれています。sed を使用すると、より読み易い形式で取得できます。例: sed 's:\x0:\n:g' /proc/$PID/environ

変数の定義

環境を不必要に汚染しないために、変数のスコープを制限するように努めるべきです。実際、グラフィカルセッションや systemd サービスでは、変数を有効にするために特定の場所で設定することが要求されます。環境変数のスコープは、それらが影響を与えるコンテキストに分けられます:

グローバル

シェルの初期化ファイルを使う

大半の Linux ディストリビューションは、あなたに /etc/profile 等のファイルに環境変数の追加・変更を行うよう指示します。また、/etc/locale.conf のような変数設定を含むパッケージ固有の設定ファイルがあることも覚えておいてください。環境変数の維持・管理は必ず行い、環境変数を含むことができる多数のファイルに注意を払うようにしてください。原則的に、あらゆるシェルスクリプトは環境変数の初期化に使うことができますが、以下のような UNIX の慣例に従い特定のファイルでのみ行われるべきです。

以下のファイルは、システムのグローバルな環境変数を定義するために使用できますが、それぞれに異なる制限があります:

  • /etc/environmentpam_env モジュールによって使用され、シェルに依存しないため、スクリプトやグロブ展開は使用できません。このファイルは、変数=値 という形式しか受け入れません。
  • /etc/profile は、ログインシェルのみに対して変数を初期化します。しかし、このファイルはスクリプト (例: /etc/profile.d/ 内にあるファイル) を実行し、すべての Bourne shell 互換シェルで使用することができます。
  • シェル固有の設定ファイル - シェルのグローバルな設定ファイルで、変数の初期化やスクリプトの実行を行います。例えば Bash#設定ファイル (例: ~/.bashrc)) や Zsh#スタートアップ/シャットダウン ファイル (例: ~/.zshrc) です。

以下の Bash ヘルパ関数を使えば、複数のディレクトリを PATH 環境変数に末尾追加することができます。環境変数を定義しているファイル (~/.bashrc など) の戦闘にこの関数を追加してください。この関数は、ファイルシステム上に実際に存在するディレクトリのみを追加し、重複するエントリは作成しません。

add_paths() {
  for d in "$@"; do
    [[ -d "$d" && ! "$PATH" =~ (^|:)$d(:|$) ]] && PATH="$PATH:$d"
  done
}

add_paths ~/bin ~/scripts

ほとんどのシェル (Bash、Zsh、fish を含む) では、export コマンドを使って環境に変数を追加することができます。これにより、~/my-environment.sh などのように通常のファイルで環境変数を定義することができます:

~/my-environment.sh
export EDITOR=vim
export XDG_CACHE_HOME="$HOME/.cache"
export XDG_CONFIG_HOME="$HOME/.config"
export XDG_DATA_HOME="$HOME/.local/share"
export XDG_STATE_HOME="$HOME/.local/state"

このファイルは、シェルのスタートアップファイルから source することができます:

~/.bashrc
source ~/my-environment.sh
~/.config/fish/config.fish
source ~/my-environment.sh

pam_env を使う

pam_env(8) PAM モジュールは、環境変数の設定を以下のファイルから順番にロードします: /etc/security/pam_env.conf/etc/environment の順です。

ノート
  • これらのファイルは、他のファイル、特に、~/.profile~/.bash_profile~/.zshenv より前に読み込まれます。
  • 非推奨の ~/.pam_environment はもう読み込まれません。FS#68945 を参照してください。

/etc/environment では、変数= というペアを1行に1つずつ記述しなければなりません。例:

/etc/environment
EDITOR=nano

/etc/security/pam_env.conf は以下の形式で記述します:

/etc/security/pam_env.conf
VARIABLE [DEFAULT=value] [OVERRIDE=value]

@{HOME} @{SHELL} は、/etc/passwd で定義されているものに拡張される特別な変数です。次の例は、HOME 環境変数を別の変数に展開する方法を示しています:

/etc/security/pam_env.conf
XDG_CONFIG_HOME   DEFAULT=@{HOME}/.config
ノート 変数 ${HOME} および ${SHELL} は、HOME および SHELL 環境変数にはリンクされていません。これらはデフォルトでは設定されていません。

また、この形式では、${VARIABLE} を使って、既に定義されている変数を他の変数の値で展開することができます。例えば:

GOPATH DEFAULT=${XDG_DATA_HOME}/go

VARIABLE=value のペアも可能ですが、これらのペアでは変数の展開はサポートされていません。詳しくは pam_env.conf(5) を参照してください。

ユーザーごと

環境変数をグローバルに定義したくないという時もあるでしょう。例えば、PATH/home/my_user/bin を追加したいが、システム上の他のユーザーには同じ PATH を使って欲しくないという場合が考えられます。様々なファイルを使うことでローカルに環境変数を定義することができます:

ローカルで使用するディレクトリを PATH に追加するには、~/.bash_profile に次のように記述します:

export PATH="${PATH}:/home/my_user/bin"

変数をアップデートするために、再ログインするかファイルを source してください: $ source ~/.bash_profile

ノート dbus デーモンや systemd のユーザインスタンスは、~/.bashrc などのような場所で設定された環境変数を継承しません。これはつまり、dbus によってアクティブ化されたプログラム (GNOME Files など) は、そのような変数をデフォルトで使用しないことを意味します。Systemd/ユーザー#環境変数 を参照してください。
ヒント export -p を実行することで、ユーザセッションに対して宣言されたグローバルな環境変数とローカルな環境変数を見ることができます。

グラフィック環境

環境変数がグラフィカルなアプリケーションにしか影響しない場合は、グラフィカルセッション内でのみ設定することにより、その範囲を制限することができます。スコープを大きい順に並べると:

デスクトップ環境セッションごと

一部のグラフィカル環境 (例えば KDE Plasma) は、ログイン時のシェルスクリプト実行をサポートしており、環境変数の設定に利用することができます。例としては KDE#自動起動 を参照してください。

Xorg セッションごと

Xorg セッションの環境を変更する手順は、Xorg セッションの起動方法によって異なります:

スクリプトの終わりはどのファイルであるかに依存し、高度な構文は使用するシェルに依存しますが、基本的な使い方は普遍的です:

~/.xprofile, ~/.xinitrc, or ~/.xsession
...
export GUI_VAR=value
...
Wayland セッションごと

Wayland は Xorg 関連のファイルを起動しないので、GDMKDE Plasma は代わりに systemd ユーザ環境変数を読み込みます。

~/.config/environment.d/envvars.conf
GUI_VAR=value

Wayland セッションをサポートする他のディスプレイマネージャ (例: SDDM) は、まだこれを直接はサポートしていません。しかし、LightDMPlasma Login ManagerSDDM はログインシェルのスタートアップスクリプトを Wayland セッションでも読み込みます。

greetd/etc/profile および ~/.profile を読み込みます。この動作は、デフォルトで有効になっている source_profile 設定によって制御されます。

~/.bash_profile などのスタートアップスクリプトを読み込むディスプレイマネージャを使用していて、environment.d を使用したい場合、以下のように読み込むことができます:

~/.bash_profile
# systemd-environment-d-generator(8) を使用して環境を生成し、その変数をエクスポートする
set -o allexport
source <(/usr/lib/systemd/user-environment-generators/30-systemd-environment-d-generator)
set +o allexport
ノート /usr/lib/systemd/user-environment-generators にある他のジェネレーター、例えば 60-flatpak は環境変数の値を引用符で囲まない場合があります。この場合、出力は export -- "$(/usr/lib/systemd/user-environment-generators/60-flatpak)" を使用して読み込む必要があります。
アプリケーションごと

セッション全体ではなく、特定のアプリケーションにのみ環境変数を設定するには、そのアプリケーションの .desktop ファイルを編集してください。その方法は デスクトップエントリ#環境変数の変更 を参照してください。

Steam ゲームでは、起動オプションを編集することでプログラムの環境を設定することができます。Steam#起動オプション を参照してください。

セッションまたはシェルごと

時として、一時的な変数のみが必要である場合もあります。特定のディレクトリ内の実行ファイルを実行する際に一時的に絶対パスを入力する手間を省きたい場合や、一時的な短いシェルスクリプトでそのパスを使用したい場合があるでしょう。

例えば、セッション固有のディレクトリを PATH に追加するには:

$ export PATH="${PATH}:/home/my_user/tmp/usr/bin"

シェル固有のディレクトリのみを PATH に追加するには:

$ PATH="${PATH}:/home/my_user/tmp/usr/bin"

Bash では、PATH は既にデフォルトで export されているので、上記のどちらの方法を用いても、変数を上書きしない限り、変数の変更がサブプロセスから見えてしまいます。export された変数とされていない変数の違いをよりわかりやすく比較するには、以下を実行してみてください:

$ MYVAR="shell-only"
$ bash -c 'echo $MYVAR'  # 何も表示されない

$ export MYVAR="session-wide"
$ bash -c 'echo $MYVAR'  # 表示される。すなわち、セッション全体に反映されている

以下のセクションでは Linux システムで一般的に使われている環境変数を並べており、それぞれの値について説明しています。

デスクトップ環境の検出

XDG_CURRENT_DESKTOP

コロンで区切られた文字列リストを含む freedesktop.org 変数。現在のデスクトップ環境を示します[4]。活発に開発されているデスクトップ環境の標準化された値として次があります: GNOMEGNOME-FlashbackKDELXDELXQtMATETDEUnityXFCEEDECinnamonPantheonDDE [5]

ヒント
  • Cinnamon は、他のデスクトップ環境より後に登録されました。そのため、Qt[6] など一部のソフトウェアは、登録前の値である X-CINNAMON を期待します。
  • Hyprland は、Hyprland 用として非公式に認められています。
XDG_SESSION_DESKTOP

XDG_CURRENT_DESKTOP と似ていますが、単一の文字列しか許可しません。その名前にも関わらず、これは freedesktop.org によって標準化されたものではありません

DE

使用中のデスクトップ環境 (desktop environment) を示すレガシーな変数です。どのような値を取りうるかについての中心的なドキュメントはありませんが、xdg-utils は多くのデスクトップ環境についてのリファレンスを提供しています。

DESKTOP_SESSION

これもレガシーな変数です。DE に似ていますが、それよりは一般的ではありません。セッションの (/usr/share/xsessions/ 内の) デスクトップエントリへのパスを格納できます [7]

WINDOW_MANAGER

デスクトップ環境で使用するウィンドウマネージャ選択するために時々使われる変数です。他のプログラムが読み取るために、既に選択されているディスプレイマネージャやデスクトップ環境によって設定される他の変数とは対照的です。

DISPLAY

ホスト、ディスプレイ、スクリーンを指定するために X Window System によって使用されます。形式は ホスト名:ディスプレイ.スクリーン です。ディスプレイとは、共通の入力デバイス群 (キーボードやマウスなど) を共有するスクリーンの集まりを指します。ホスト名は、ディスプレイが接続されるマシンの名前を指定するためにかつて使用されていましたが、X クライアントと同じコンピュータ上で X サーバが実行される場合は空欄になっているはずです。詳細は X(7) を参照してください。

WAYLAND_DISPLAY

Wayland における DISPLAY のようなものです。コンポジタによって設定されます。これが設定されていない場合、アプリケーションは wayland-0 を使おうと試みます。

XAUTHORITY

.Xauthority ファイルへのパスです。このファイルには、X Window Server にアクセスするための資格情報が入っています。これは、認証のために X サーバに送られるクッキー (任意のデータ) の形で保存されます (例: MIT-MAGIC-COOKIE-1)。

システムやセッションのパス

HOME

現在のユーザのホームディレクトリへのパスが格納されます。この変数は、アプリケーションが現在のユーザに関連した設定ファイル等を見つけるために使うことができます。

PATH

コロンで区切られたディレクトリのリストが格納されています。システムは、この変数に登録されているディレクトリから実行ファイルを探索します。通常のコマンド (lssystemctlpacman など) がシェル (bashzsh など) によって解釈される際、シェルは PATH のリスト内のディレクトリからそのコマンドと同じ名前の実行ファイルを探索し、それを実行します。PATH に含まれないディレクトリにある実行ファイルを実行するには、実行ファイルへの相対パスや絶対パスを指定する必要があります。例えば、./a.out/bin/ls といった形です。

ノート セキュリティ上の理由により PATH にはカレント作業ディレクトリ (.) を含めないことが推奨されます。ユーザが騙されて、悪意のあるコマンドを実行してしまうかもしれないからです。
PWD

作業ディレクトリへのパスが入ります。

OLDPWD

前の作業ディレクトリへのパスが入ります。つまり、最後に cd を実行する前の PWD です。

MAIL

受信したメールの保存場所が入ります。伝統的な設定は /var/spool/mail/$LOGNAME です。

ネットワークプロキシ

ftp_proxy

FTP プロキシサーバーが入ります。

ftp_proxy="ftp://192.168.0.1:21"
http_proxy

HTTP プロキシサーバーが入ります。

http_proxy="http://192.168.0.1:80"

ドキュメントのパス

MANPATH

man が man ページを探索するディレクトリのリストがコンマで区切られて格納されます。

ノート /etc/profile に "Man is much better than us at figuring this out" (man は我々よりずっと上手くこれを解決する) と書いてあるとおり、一般的にこの変数はデフォルトのままにしておくべきです。 manpath(5) を参照。
INFODIR

info コマンドが info ページを探索するディレクトリのリストがコンマで区切られて格納されます。例: /usr/share/info:/usr/local/share/info

デフォルトプログラム

SHELL

ユーザの優先シェルへのパスが含まれます。この変数の値は、現在実行中のシェルである必要はないことに注意してください。この変数に値がない場合、Bash は自動的に /etc/passwd で定義されているユーザのログインシェルに設定するか、判断できない場合は /bin/sh にします。

PAGER

ファイルの内容を一覧表示するために使用されるプログラムを実行するコマンドが含まれます。例: /bin/less

EDITOR

ファイルの編集に使用される軽量プログラムを実行するコマンドが含まれています (例:/usr/bin/nano)。例えば、以下の例のように、X 下では gedit を使い、それ以外では nano を使うように設定するインタラクティブスイッチを記述することができます:

[ -n "$DISPLAY" ] && export EDITOR=gedit || export EDITOR=nano
VISUAL

メールの編集などより高度な作業に使われる本格的なエディタを実行するコマンドが含まれています (例: vivimemacs など)。

TERMINAL

ユーザの優先ターミナルエミュレータを実行するコマンドが含まれます。これは、現在実行中のターミナル (TERM) と同じであるとは限りません。

BROWSER

ウェブブラウザへのパスが含まれています。グラフィカル環境 (X など) が利用できるかに応じてこの変数を動的に変更するようなコードをインタラクティブシェルの設定ファイルに記述しておくと便利です:

[ -n "$DISPLAY" ] && export BROWSER=firefox || export BROWSER=links
ヒント WAYLAND_DISPLAY 環境変数を使うことで、Wayland コンポジタが実行されているかどうかに応じてこれらのデフォルトプログラムを設定することができます。

その他

TERM

実行中のターミナル (terminal) の種類が格納されます (例: xterm-256color)。この変数は、ターミナル固有の機能を期待する、ターミナル内で実行されるプログラムによって使用されます (terminfo(5) を参照)。この変数は、ターミナルエミュレータによって設定されるため、シェルから上書きすることは推奨されません。

TZ

ユーザ毎にシステムのタイムゾーンとは異なるタイムゾーンを設定するために使用することができます。/usr/share/zoneinfo/ 内にはタイムゾーンが列挙されているので、これをリファレンスとして使用することができます (例: TZ=":/usr/share/zoneinfo/Pacific/Fiji")。TZ 変数に zoneinfo ファイルを指定する場合、GNU マニュアル に従ってコロンで始める必要があります。

シェル環境の検出

シェル環境を検出するテストは、シェル環境の検出に関して書かれたリポジトリを見てください。これには、ログイン/インタラクティブシェル、Xorg セッション、TTY、SSH セッションの検出も含まれています。

参照

翻訳ステータス: このページは en:Environment variables の翻訳バージョンです。最後の翻訳日は 2026-03-29 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。