LinuxおよびUnixベースのシステムでは、環境変数は動的な名前付き値のセットであり、シェルまたはサブシェルで起動されるアプリケーションによって使用されるシステム内に格納されます。簡単に言うと、環境変数は、名前と関連する値を持つ変数です。
環境変数を使用すると、システムの動作とシステム上のアプリケーションの動作をカスタマイズできます。たとえば、環境変数には、デフォルトのテキストエディタブラウザ、実行可能ファイルへのパス、またはシステムロケールとキーボードレイアウト設定に関する情報を格納できます。
このガイドでは、環境変数とシェル変数の読み取りと設定について説明します。
環境変数とシェル変数#
変数の形式は次のとおりです。
KEY=value
KEY="Some other value"
KEY=value1:value2
- 変数の名前では大文字と小文字が区別されます。慣例により、環境変数には大文字の名前を付ける必要があります。
- 変数に複数の値を割り当てる場合は、コロンで区切る必要があります
:
キャラクター。 - 等しい
=
の周りにスペースはありません シンボル。
変数は、環境変数とシェル変数の2つの主要なカテゴリに分類できます。
環境変数 システム全体で利用可能であり、生成されたすべての子プロセスとシェルによって継承される変数です。
シェル変数 現在のシェルインスタンスにのみ適用される変数です。 zsh
などの各シェル およびbash
、独自の内部シェル変数のセットがあります。
Linuxで環境変数を一覧表示および設定できるコマンドがいくつかあります。
-
env
–このコマンドを使用すると、現在のプログラムを変更せずに、カスタム環境で別のプログラムを実行できます。引数なしで使用すると、現在の環境変数のリストが出力されます。 -
printenv
–コマンドは、すべてまたは指定された環境変数を出力します。 set
–コマンドは、シェル変数を設定または設定解除します。引数なしで使用すると、環境変数とシェル変数、およびシェル関数を含むすべての変数のリストが出力されます。unset
–コマンドはシェル変数と環境変数を削除します。export
–コマンドは環境変数を設定します。
環境変数のリスト#
環境変数を表示するために最もよく使用されるコマンドは、printenv
です。 。変数の名前が引数としてコマンドに渡された場合、その変数の値のみが表示されます。引数が指定されていない場合、printenv
すべての環境変数のリストを1行に1つの変数で出力します。
たとえば、HOME
の値を表示するには 実行する環境変数:
printenv HOME
出力には、現在ログインしているユーザーのパスが出力されます:
/home/linuxize
printenv
に複数の引数を渡すこともできます コマンド:
printenv LANG PWD
en_US
/home/linuxize
printenv
を実行する場合 またはenv
引数なしのコマンドは、すべての環境変数のリストを表示します:
printenv
出力は次のようになります:
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35;...
LESSCLOSE=/usr/bin/lesspipe %s %s
LANG=en_US
S_COLORS=auto
XDG_SESSION_ID=5
USER=linuxize
PWD=/home/linuxize
HOME=/home/linuxize
SSH_CLIENT=192.168.121.1 34422 22
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
SSH_TTY=/dev/pts/0
MAIL=/var/mail/linuxize
TERM=xterm-256color
SHELL=/bin/bash
SHLVL=1
LANGUAGE=en_US:
LOGNAME=linuxize
XDG_RUNTIME_DIR=/run/user/1000
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
LESSOPEN=| /usr/bin/lesspipe %s
_=/usr/bin/printenv
以下は、最も一般的な環境変数の一部です。
USER
-現在ログインしているユーザー。-
HOME
-現在のユーザーのホームディレクトリ。 EDITOR
-使用されるデフォルトのファイルエディタ。これは、edit
と入力するときに使用されるエディターです。 ターミナルで。SHELL
-bashやzshなどの現在のユーザーのシェルのパス。-
LOGNAME
-現在のユーザーの名前。 -
PATH
-コマンド実行時に検索されるディレクトリのリスト。コマンドを実行すると、システムはこれらのディレクトリをこの順序で検索し、最初に見つかった実行可能ファイルを使用します。 -
LANG
-現在のロケール設定。 -
TERM
-現在のターミナルエミュレーション。 MAIL
-現在のユーザーのメールが保存されている場所。
printenv
およびenv
コマンドは環境変数のみを出力します。環境、シェルと変数、シェル関数を含むすべての変数のリストを取得する場合は、set
を使用できます。 コマンド:
set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
このコマンドはすべての変数の大きなリストを表示するので、おそらく出力をless
にパイプする必要があります コマンド。
set | less
echoコマンドを使用して、シェル変数を出力することもできます。たとえば、BASH_VERSION
の値を出力するには 実行する変数:
echo $BASH_VERSION
4.4.19(1)-release
環境変数の設定#
シェル変数と環境変数の違いをわかりやすく説明するために、シェル変数の設定から始めて、環境変数に移ります。
MY_VAR
という名前の新しいシェル変数を作成するには 値Linuxize
次のように入力するだけです:
MY_VAR='Linuxize'
echo $MY_VAR
のいずれかを使用して、変数が設定されていることを確認できます。 setコマンドの出力をgrepset | grep MY_VAR
:
echo $MY_VAR
Linuxize
printenv
を使用します この変数が環境変数であるかどうかを確認するコマンド:
printenv MY_VAR
出力は空になり、変数が環境変数ではないことを示します。
新しいシェルで変数を出力しようとすると、空の出力が得られます。
bash -c 'echo $MY_VAR'
export
コマンドは環境変数を設定するために使用されます。
環境変数を作成するには、シェル変数を環境変数としてエクスポートするだけです。
export MY_VAR
これは、次のコマンドを実行して確認できます:
printenv MY_VAR
Linuxize
今回、新しいシェルで変数を印刷しようとすると、端末に変数名が印刷されます。
bash -c 'echo $MY_VAR'
Linuxize
1行で環境変数を設定することもできます:
export MY_NEW_VAR="My New Var"
この方法で作成された環境変数は、現在のセッションでのみ使用できます。新しいシェルを開くか、ログアウトすると、すべての変数が失われます。
永続的な環境変数#
環境変数を永続化するには、bash構成ファイルでそれらの変数を定義する必要があります。ほとんどのLinuxディストリビューションでは、新しいセッションを開始すると、環境変数が次のファイルから読み取られます。
-
/etc/environment
-このファイルを使用して、システム全体の環境変数を設定します。このファイルの変数は、次の形式で設定されます。FOO=bar
VAR_TEST="Test Var"
-
/etc/profile
-このファイルに設定されている変数は、bashログインシェルに入るたびに読み込まれます。このファイルで環境変数を宣言するときは、export
を使用する必要があります コマンド:export JAVA_HOME="/path/to/java/home"
export PATH=$PATH:$JAVA_HOME/bin
-
ユーザーごとのシェル固有の構成ファイル。たとえば、Bashを使用している場合は、
~/.bashrc
で変数を宣言できます。 :export PATH="$HOME/bin:$PATH"
新しい環境変数を現在のシェルセッションにロードするには、source
を使用します コマンド:
source ~/.bashrc
結論#
このガイドでは、環境変数とシェル変数を設定および一覧表示する方法を示しました。
ご不明な点がございましたら、お気軽にコメントをお寄せください。