目次:
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
出力は次のようになります。
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
を入力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
環境変数の設定
シェル変数と環境変数の違いをわかりやすく説明するために、シェル変数の設定から始めて、環境変数に進みます。
MY_VAR
という名前で
MY_VAR
値を持つ新しいシェル変数を作成するには、
Linuxize
ように入力します。
MY_VAR='Linuxize'
変数が設定されていることを確認するには、grep
set | grep MY_VAR
setコマンドの出力をフィルタリングする
echo $MY_VAR
を使用します
set | grep MY_VAR
set | 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
変数を宣言でき~/.bashrc
。export PATH="$HOME/bin:$PATH"
新しい環境変数を現在のシェルセッションに読み込むには、
source
コマンドを使用し
source
。
結論
このガイドでは、環境変数とシェル変数を設定および一覧表示する方法を示しました。
ご質問がある場合は、コメントをお気軽にお寄せください。
ターミナル