Linuxでの環境変数の設定と一覧表示

Linuxベースのシステムでは、動的な名前付きの値を環境変数として設定できます。 これらの値はシステム内に保存され、コマンドラインアプリケーションによって使用されます。 簡単に言うと、環境変数は名前と関連する値を持つ変数です。 変数は、値を表す記号、文字、または「x」や「y」などの単語です。

環境変数には、デフォルトのテキストエディタまたはブラウザ、実行可能ファイルへのパスなどに関する情報を格納できます。

環境変数は、プログラムとその子プログラムでグローバルに使用できます。 シェル変数は、現在のシェルでのみ使用できます。

このチュートリアルでは、環境変数とシェル変数を一覧表示して設定する方法について説明します。

環境変数

環境変数は、システム全体で使用可能であり、生成されたすべての子プロセスとシェルによって継承される変数です。

環境変数は、キーと値のペアを表す文字列として実装されます。 複数の値が渡される場合、それらは通常、コロン(:)文字で区切られます。 各ペアは通常、次のようになります。

KEY=value1:value2:value3

変数の名前では大文字と小文字が区別され、通常は大文字で使用されます(MYVAR1、MYVAR2 …)

値に空白が含まれている場合は、引用符が使用されます。

KEY="value with spaces"

シェル変数

シェル変数は、それらが設定または定義されたシェル内に排他的に含まれる変数です。 zshや bash、独自の内部シェル変数のセットがあります。 これらは通常、現在の作業ディレクトリなどの一時的なデータを追跡するために使用されます。 使用法は、グローバル環境変数の場合と同じです。

シェル変数を環境変数として使用できるようにするには、exportMYVARを使用します。

$ export MYVAR=linoxide.com
$ echo $MYVAR
linoxide.com
$ env | grep MYVAR
MYVAR=linoxide.com

一般的な環境変数とシェル変数

一部の環境変数とシェル変数は非常に便利で、かなり頻繁に参照されます。 遭遇する一般的な環境変数は次のとおりです。

学期これは、シェルの実行時にエミュレートする端末のタイプを指定します。 さまざまな動作要件に応じて、さまざまなハードウェア端末をエミュレートできます。 ただし、通常はこれについて心配する必要はありません。
ユーザー現在ログインしているユーザー。
障害者現在の作業ディレクトリ。
OLDPWD以前の作業ディレクトリ。 これは、cd-を実行して前のディレクトリに戻すために、シェルによって保持されます。
LS_COLORSこれは、オプションでlsコマンドに色付きの出力を追加するために使用されるカラーコードを定義します。 これは、さまざまなファイルタイプを区別し、ユーザーに一目でより多くの情報を提供するために使用されます。
郵便物現在のユーザーのメールボックスへのパス。
コマンドを探すときにシステムがチェックするディレクトリのリスト。 ユーザーがコマンドを入力すると、システムはこの順序で実行可能ファイルのディレクトリをチェックします。
LANG文字エンコードを含む、現在の言語とローカリゼーションの設定。
現在のユーザーのホームディレクトリ。
_以前に実行された最新のコマンド。

これらの環境変数に加えて、よく目にするシェル変数は次のとおりです。

BASHOPTSときに使用されたオプションのリスト bash 実行されました。 これは、シェル環境が希望どおりに動作するかどうかを確認するのに役立ちます。
BASH_VERSIONのバージョン bash 人間が読める形式で実行されます。
BASH_VERSINFOのバージョン bash、機械可読出力で。
画面に出力を描画するために使用されている幅の列の数。
ダースタックpushdおよびpopdコマンドで使用可能なディレクトリのスタック。
HISTFILESIZEファイルに保存されたコマンド履歴の行数。
履歴サイズメモリに許可されているコマンド履歴の行数。
ホスト名この時点でのコンピューターのホスト名。
IFSコマンドラインで入力を分離するための内部フィールドセパレータ。 デフォルトでは、これはスペースです。
PS1プライマリコマンドプロンプトの定義。 これは、シェルセッションを開始したときにプロンプ​​トがどのように表示されるかを定義するために使用されます。 PS2は、コマンドが複数行にまたがる場合の2次プロンプトを宣言するために使用されます。
SHELLOPTSsetオプションで設定できるシェルオプション。
UID現在のユーザーのUID。

シェルと環境変数のリスト

Linuxで環境変数を一覧表示できるコマンドがいくつかあります。

env –このコマンドを使用すると、現在のプログラムを変更せずに、カスタム環境で別のプログラムを実行できます。 引数なしで使用すると、現在の環境変数のリストが出力されます。
printenv –コマンドは、すべてまたは指定された環境変数を出力します。
set –コマンドはシェル変数を設定または設定解除します。 引数なしで使用すると、環境変数とシェル変数、およびシェル関数を含むすべての変数のリストが出力されます。

デフォルトの状態では、envとprintenvはまったく同じように機能するはずです。

$ printenv
SSH_CONNECTION=10.0.2.2 37182 10.0.2.15 22
LESSCLOSE=/usr/bin/lesspipe %s %s
LANG=C.UTF-8
XDG_SESSION_ID=5
USER=vagrant
MYVAR=linoxide.com
PWD=/home/vagrant
HOME=/home/vagrant
SSH_CLIENT=10.0.2.2 37182 22
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
SSH_TTY=/dev/pts/0
MAIL=/var/mail/vagrant
TERM=xterm-256color
SHELL=/bin/bash
SHLVL=1
LOGNAME=vagrant
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

envコマンドと ‘printenv’コマンドの違いは、それらのより具体的な機能でのみ明らかです。 たとえば、「printenv」を使用すると、個々の変数の値を要求できます。

$ printenv SHELL
/bin/bash
$ printenv HOME
/home/vagrant
$ printenv MYVAR
linoxide.com

envコマンドを使用すると、一連の変数をコマンドに渡すことにより、プログラムが実行されている環境を変更できます。

env MYVAR=linoxide.com command_to_run command_options

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=()
BASH_CMDS=()
BASH_COMPLETION_VERSINFO=([0]="2" [1]="8")
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="4" [1]="4" [2]="20" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu")
BASH_VERSION='4.4.20(1)-release'
COLUMNS=140
DIRSTACK=()
EUID=1000
GROUPS=()
HISTCONTROL=ignoreboth
HISTFILE=/home/vagrant/.bash_history
HISTFILESIZE=2000
HISTSIZE=1000
HOME=/home/vagrant
HOSTNAME=ubuntu-bionic
HOSTTYPE=x86_64
IFS=

このコマンドはすべての変数の大きなリストを表示するので、おそらく出力をlessコマンドにパイプする必要があります。

set | less

シェルと環境変数を設定する

Linuxで環境変数を設定するために使用できるコマンドは次のとおりです。

set –コマンドはシェル変数を設定または設定解除します。 引数なしで使用すると、環境変数とシェル変数、およびシェル関数を含むすべての変数のリストが出力されます。
unset –コマンドはシェル変数と環境変数を削除します。
export –コマンドは環境変数を設定します。

シェル変数と環境変数の違いをよりよく理解するために、シェル変数の設定から始めて、次に環境変数に移ります。

まず、現在のセッション内でシェル変数を定義します。 echo $ MYVARを使用して、変数が設定されていることを確認できます

$ MYVAR=Linoxide
$ echo $MYVAR
Linoxide

printenvコマンドを使用して、この変数が環境変数であるかどうかを確認します。

$ printenv MYVAR

出力は返されません。 これは、MYVAR変数が環境変数ではないことを意味します。

exportコマンドは、環境変数を設定するために使用されます。

環境変数を作成するには、シェル変数を環境変数としてエクスポートするだけです。

$ export MYVAR

これは、次のコマンドを実行して確認できます。

$ printenv MYVAR
Linoxide

1行で環境変数を設定することもできます。

$ export MYNEWVAR="My New Variable"

この方法で作成された環境変数は、現在のセッションでのみ使用できます。 新しいシェルを開くか、ログアウトすると、すべての変数が失われます。

環境変数をシェル変数に戻すことも、完全に(未設定で)削除することもできます。

MYVAR変数は環境変数として定義されています。 次のように入力すると、シェル変数に戻すことができます。

$ export -n MYVAR

これは環境変数ではなくなりましたが、シェル変数のままです。

シェルまたは環境のいずれかの変数の設定を完全に解除したい場合は、unsetコマンドを使用して行うことができます。

$ unset MYVAR

設定されていないことを確認できます。

$ echo $MYVAR

変数が設定されていないため、何も返されません。

永続的な環境変数

多くのプログラムが環境変数を使用して操作方法の詳細を決定することはすでに述べました。 新しいシェルセッションを開始するたびに重要な変数を設定する必要はありません。
ザ bash シェルは、セッションの開始方法に応じて、さまざまな構成ファイルを読み取ります。
対話型シェルセッションは、端末に接続されているシェルセッションです。 非対話型シェルセッションは、ターミナルセッションに接続されていないものです。

異なるセッション間の1つの違いは、シェルが「ログイン」セッションとして生成されているのか、「非ログイン」セッションとして生成されているのかです。

ほとんどのLinuxディストリビューションでは、新しいセッションを開始すると、環境変数が次のファイルから読み取られます。

/ etc / environment -このファイルを使用して、システム全体の環境変数を設定します。

/ etc / profile -このファイルに設定された変数は、 bash ログインシェルに入ります。

〜/ .bashrc -ユーザーごとのシェル固有の構成ファイル。 にとって example、Bashを使用している場合は、そこで変数を宣言できます。

新しい環境変数を現在のシェルセッションにロードするには、sourceコマンドを使用します。

$ source ~/.bashrc

システム全体の変数を設定する必要がある場合は、それらをに追加することを検討してください。 / etc / profile/等/bash.bashrc、 また / etc / environment

結論

このチュートリアルでは、環境変数とシェル変数を設定および一覧表示する方法を学習しました。 これらの変数はシェルセッションに常に存在し、多くのプログラムで非常に役立ちます。 システムの環境を読んだり変更したりする必要がある、他にももっとありふれた、しかしもっと一般的なシナリオはたくさんあります。 ご不明な点がございましたら、下のコメント欄にご記入ください。

tn' LANG=C.UTF-8 LESSCLOSE='/usr/bin/lesspipe %s %s' LESSOPEN='| /usr/bin/lesspipe %s' LINES=35 LOGNAME=vagrant .....

このコマンドはすべての変数の大きなリストを表示するので、おそらく出力をlessコマンドにパイプする必要があります。

シェルと環境変数を設定する

Linuxで環境変数を設定するために使用できるコマンドは次のとおりです。

set –コマンドはシェル変数を設定または設定解除します。 引数なしで使用すると、環境変数とシェル変数、およびシェル関数を含むすべての変数のリストが出力されます。
unset –コマンドはシェル変数と環境変数を削除します。
export –コマンドは環境変数を設定します。

シェル変数と環境変数の違いをよりよく理解するために、シェル変数の設定から始めて、次に環境変数に移ります。

まず、現在のセッション内でシェル変数を定義します。 echo $ MYVARを使用して、変数が設定されていることを確認できます

printenvコマンドを使用して、この変数が環境変数であるかどうかを確認します。

出力は返されません。 これは、MYVAR変数が環境変数ではないことを意味します。

exportコマンドは、環境変数を設定するために使用されます。

環境変数を作成するには、シェル変数を環境変数としてエクスポートするだけです。

これは、次のコマンドを実行して確認できます。

1行で環境変数を設定することもできます。

この方法で作成された環境変数は、現在のセッションでのみ使用できます。 新しいシェルを開くか、ログアウトすると、すべての変数が失われます。

環境変数をシェル変数に戻すことも、完全に(未設定で)削除することもできます。

MYVAR変数は環境変数として定義されています。 次のように入力すると、シェル変数に戻すことができます。

これは環境変数ではなくなりましたが、シェル変数のままです。

シェルまたは環境のいずれかの変数の設定を完全に解除したい場合は、unsetコマンドを使用して行うことができます。

設定されていないことを確認できます。

変数が設定されていないため、何も返されません。

永続的な環境変数

多くのプログラムが環境変数を使用して操作方法の詳細を決定することはすでに述べました。 新しいシェルセッションを開始するたびに重要な変数を設定する必要はありません。
ザ bash シェルは、セッションの開始方法に応じて、さまざまな構成ファイルを読み取ります。
対話型シェルセッションは、端末に接続されているシェルセッションです。 非対話型シェルセッションは、ターミナルセッションに接続されていないものです。

異なるセッション間の1つの違いは、シェルが「ログイン」セッションとして生成されているのか、「非ログイン」セッションとして生成されているのかです。

ほとんどのLinuxディストリビューションでは、新しいセッションを開始すると、環境変数が次のファイルから読み取られます。

/ etc / environment -このファイルを使用して、システム全体の環境変数を設定します。

/ etc / profile -このファイルに設定された変数は、 bash ログインシェルに入ります。

〜/ .bashrc -ユーザーごとのシェル固有の構成ファイル。 にとって example、Bashを使用している場合は、そこで変数を宣言できます。

新しい環境変数を現在のシェルセッションにロードするには、sourceコマンドを使用します。

システム全体の変数を設定する必要がある場合は、それらをに追加することを検討してください。 / etc / profile/等/bash.bashrc、 また / etc / environment

結論

このチュートリアルでは、環境変数とシェル変数を設定および一覧表示する方法を学習しました。 これらの変数はシェルセッションに常に存在し、多くのプログラムで非常に役立ちます。 システムの環境を読んだり変更したりする必要がある、他にももっとありふれた、しかしもっと一般的なシナリオはたくさんあります。 ご不明な点がございましたら、下のコメント欄にご記入ください。