1. 概要

各Linuxプロセスには、親から継承する独自の環境変数のセットがあります。 たとえば、シェルでコマンドを実行すると、そのコマンドはシェルの環境変数を継承します。

このチュートリアルでは、 env printenv、、およびexportを使用してこれらの変数を管理する方法を見ていきます。

Bashを使用しますが、この記事のすべての例は、他のPOSIX互換シェルでも機能するはずです。

2. 地球環境変数

シェルを起動するとき、事前定義された環境変数のセットを使用してシェルを作成します。 グローバルに、またはユーザーごとに宣言できます。

Bashでは、 / etc /profileでグローバル変数を宣言します。 ただし、それらを独自のスクリプトファイルで宣言し、/etc/profile.dに配置することをお勧めします。 Bashはこれらを自動的に取得します。

グローバル変数は、システム内のすべてのユーザーに影響します。 各ユーザーは、ホームディレクトリに〜/ .profile を作成することにより、独自の「グローバル」環境変数のセットを作成できます。

私たちが日常的に使用する最も一般的な環境変数の1つは、PATH変数です。 PATH には、実行可能ファイルを検索するためのシェルの場所のリストが含まれています。 同様の情報を含む〜/ .profile を作成することにより、PATHに何かを追加できます。

PATH=$PATH:/path/to/executable/

ここでは、実際に PATH 変数を再宣言し、その値を PATH の現在の値に設定し、 / path / to / executeable/を追加します。

次のセクションでは、環境変数を管理するために最も一般的に使用されるコマンドについて説明します。 envprintenvを起動しましょう。

3. envおよびprintenv

各プロセスは独自の環境で実行されることはすでに説明しました。 env を使用して、追加の環境変数を指定することにより、変更された環境でプログラムを実行できます。

env CUSTOM_VAR=42 /path/to/script.sh

この例では、 env は、 CUSTOM_VAR が追加された環境として、シェル環境のコピーである環境で/path/to/script.shを実行します。値が42の変数。

実際、envはスペースで区切られた変数のリストを受け入れます。 したがって、複数の変数を追加できます。

env VAR_ONE=1 VAR_TWO=2 /path/to/script.sh

変数の前に-uを付けることで、変数の設定を解除または削除することもできます。

env -u PATH /path/to/script.sh

これにより、現在の環境のコピーでスクリプトが実行されますが、PATH変数は使用されません。

空の環境でスクリプトを実行することもできます。

env -i /path/to/scripts.sh

最後に、引数なしで env を実行すると、現在の環境のすべての変数のリストが出力されます。 printenvでも同じことができます。

[vagrant@localhost ~]$ set
HOSTNAME=localhost.localdomain
TERM=xterm-256color
SHELL=/bin/bash
HISTSIZE=1000SSH_TTY=/dev/pts/0
USER=vagrant
MAIL=/var/spool/mail/vagrant
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/vagrant/.local/bin:/home/vagrant/bin
PWD=/home/vagrant
LANG=en_US.UTF-8
HOME=/home/vagrant
LOGNAME=vagrant

スペースで区切られた変数名のリストを提供することにより、特定の変数の値を出力することもできます。

printenv HOSTNAME PATH HOME

これは印刷されます:

localhost.localdomain
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/vagrant/.local/bin:/home/vagrant/bin
/home/vagrant

4. エクスポート

環境変数とシェル変数を混同しないでください。 シェル変数は、現在のシェルにのみ適用される変数であり、実行するプログラムやスクリプトには継承されません。

set を呼び出すことにより、現在のシェルに適用されるすべての変数の概要を取得できます。

[vagrant@localhost ~]$ set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:histappend:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_LINENO=()
HOSTNAME=localhost.localdomain
TERM=xterm-256color
SHELL=/bin/bash
HISTSIZE=1000SSH_TTY=/dev/pts/0
USER=vagrant
MAIL=/var/spool/mail/vagrant
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/vagrant/.local/bin:/home/vagrant/bin
PWD=/home/vagrant
LANG=en_US.UTF-8 HOME=/home/vagrant
LOGNAME=vagrant

Bashに固有のシェル変数と、printenvを使用する前に印刷したすべての環境変数を確認できます。

シェル変数はサブプロセスに継承されませんが、エクスポートして表示することができます。 これは例で最もよく説明できます。

まず、新しいシェル変数を作成しましょう。

CUSTOM_VAR=42

echo を使用して、変数の値を出力できます。

echo "Custom var value: $CUSTOM_VAR"
42

変数がサブプロセスから見えないことを確認するために、echoコマンドをprint_custom_var.shという名前のスクリプトに入れましょう。

#!/bin/bash
echo "Custom var value: $CUSTOM_VAR"

スクリプトを実行すると、出力は次のようになります。

./print_custom_var.sh
Custom var value:

スクリプトにはCUSTOM_VARが存在しないため、スクリプトはCUSTOM_VARの値を認識できません。 export を使用して、サブプロセスに表示できるようにすることができます。

export CUSTOM_VAR

それでは、スクリプトをもう一度実行してみましょう。

./print_custom_var.sh
Custom var value: 42

5. 結論

この記事では、環境変数を管理する方法を学びました。

最初に、 /etc/profile.d〜/.profileなどの場所を使用してグローバル環境変数を設定する方法を学びました。 次に、 env printenv 、およびexportを使用して環境変数を管理する方法を確認しました。