シェル変数と環境変数

TECHRU テックる!は、「実機で学ぼう!」をコンセプトにしたインフラエンジニア専門スクールです。

現役エンジニアがLPIC, LinuC/AWS認定試験に必要な専門的な知識を分かりやすく教えております。また、実際にサーバーを構築するなど手を動かしながら学ぶことで、実践的な知識が身につきます。

シェル変数と環境変数について見ていきましょう。

シェル変数

シェル変数のスコープは特定のシェルのみです。子プロセスには継承されません。当該のシェル・プロセスを終了すると、シェル変数は失われます。これらの変数は、ユーザーがシェルスクリプト内で値を一時的に保存するためによく使用されます。

シェル変数は次のようにして宣言します。

変数名=値

環境変数

一方、環境変数はシステム全体の設定を保持するために使われます。例えばPATH環境変数はシステムが実行可能ファイルを見つけるために検索するディレクトリのリストを保持しています。

シェル変数を環境変数にエクスポートすることも可能です。エクスポートすることで、子プロセスがその変数を利用することができます。エクスポートするには、exportコマンドを使用します。

export 変数名=値

よく利用される環境変数には、以下のようなものがあります。

環境変数 説明
EDITOR デフォルトのエディタのパス
HISTFILE コマンド履歴を格納するファイル
HISTFILESIZE HISTFILEに保存する履歴数
HOME カレントユーザーのホームディレクト
HOSTNAME ホスト名
LANG ロケール(言語処理方式)
PATH コマンドやプログラムを検索するディレクトリリス
PS1 プロンプトの表示文字列
PWD カレントディレクト

環境変数を表示するには、envコマンドやsetコマンド、printenvコマンドを用います。

コマンド 説明
env 全ての環境変数を表示
set 全ての環境変数を表示
printenv 環境変数 指定した環境変数の値を表示

また、環境変数を削除するには、unsetコマンドを用います。

unset 環境変数

環境変数 PATH

シェルでコマンドを実行すると、シェルはまずビルトインコマンドをチェックします。ビルトインコマンドはシェル自体に組み込まれているコマンドで、cdechoなどがあります。

ビルトインコマンドに存在しない外部コマンドは、PATHという環境変数に指定されたディレクトリから探し出します。外部コマンドには、例えば、lscatgrepsshなどがあります。シェルがこれらの外部コマンドを実行するためには、実行ファイルがシステムのどこにあるかを知る必要があります。

PATHにディレクトリの値を追加することで、新しくコマンドを登録することができるようになります。

例えば、環境変数PATHに新しく、/opt/binディレクトリを追加する場合は次のようにします。

$ PATH=$PATH:/opt/bin

右側の$PATHは現在の環境変数PATHの値を参照しています。このため、現在の環境変数PATHの値の末尾に/opt/binが追加されたものが新しい環境変数PATHとなります。

$ PATH=/opt/bin

としてしまうと、他のコマンドが使えなくなってしまうため十分注意しましょう。

type

使いたいコマンドファイルの種類を知りたい場合、typeコマンドが有効です。typeコマンドの後にコマンド名を指定して、そのコマンドの種類(ビルトインコマンド、外部コマンド、エイリアスなど)を確認できます。

type コマンド名

例)

$ type cd
cd はシェル組み込み関数です
$ type ls
ls は `ls --color=auto' のエイリアスです
$ type cat
cat は /usr/bin/cat です

which

コマンドが外部コマンドの時、ファイルがどこにあるのかを知るには、whichコマンドを用います。

which コマンド名

whichコマンドは環境変数PATHに指定されているディレクトリの内容によりrootユーザーでないと実行できない場合があります。

例)

$ type cat
cat は /usr/bin/cat です
$ which cat
/usr/bin/cat

環境設定ファイル

環境変数は、シェルとその子プロセスに対して有効です。シェルを終了するとこれらの変数は消えてしまいます。このため、設定を保存したい場合はbashに関する設定ファイルに書き込みます。

読み込まれる設定ファイルにはさまざまなものがありますが、環境変数やシェル変数、エイリアスなどを変更する場合は、ユーザーごとのホームディレクトリに存在する.bashrc.bash_profileに記述します。

システム全体に適用するには、/etc/profileや、/etc/profile.d/以下のファイルなどに記述します。

環境設定ファイルはいくつかあり、システムによっても異なるのですが、特に使われているものは以下です。

環境設定ファイル 説明
/etc/profile または /etc/profile.d/以下の設定ファイル ログイン時に全てのユーザーが読み込みます。システム全体に適用されます。
~/.bashrc bashが起動するたびに実行されます。ユーザーごとに適用されます。
~/.bash_profile ユーザーがログインする度に実行されます。ユーザーごとに適用されます。