シェル変数と環境変数
シェルはシステムやユーザごとに必要な情報を保持し、この情報のことを変数と呼びます。
変数が有効な範囲により呼び方が異なります。
変数を定義したシェルプロセスでのみ有効な変数です。
シェル変数は以下のようにして作成することが出来ます。
シェルを終了することで変数は消滅します。
[シェル変数の定義方法]
シェル変数名=値
定義された変数をは’echo’コマンドを使って参照できます。
[コマンド形式]
echo -オプション
文字列を表示する場合は””で囲みます。変数を表示する場合は変数名の前に$を付けます。
変数を設定したシェル上と、そこから起動されるシェルやプログラムで有効な変数です。
環境変数はexportコマンドを使用して作成することが出来ます。
[環境変数の定義方法]
#export 環境変数=値
また、exportコマンドはシェル変数を環境変数に変更できます。
よく利用される環境変数には次のようなものがあります。
環境変数 | 説明 |
PATH | コマンドを検索するディレクトリリストです。パスをコロンで区切って指定します |
PWD | カレントディレクトリを表します |
HOSTNAME | ホスト名を表示します |
USER | ログインしているユーザ名を表示します |
LANG | ロケール(言語処理方式)を表します |
HOME | カレントユーザのホームディレクトリを表します |
HISTSIZE | 保存するコマンド履歴の最大値を表します |
HISTFILE | コマンド履歴を保存するファイル名を表します |
SHELL | 現在のシェルのパスを表します保存するコマンド履歴の最大値 |
設定されている変数を一覧で確認するには次のコマンドを使用します。
コマンド | 説明 |
set | 全てのシェル変数と環境変数を表示します |
env | 全ての環境変数を表示します |
printenv | 一部、または全ての環境変数を表示します |
定義した変数を削除するには’unset’コマンドを使用します。
[コマンド形式]
unset 変数名
変数の移り変わり
[コマンド実行例]
$ VAR=Linux:シェル変数VARを定義
$ echo $VAR:シェル変数VARを表示
Linux :表示される
$ bash:別のシェルを起動
$ echo $VAR:シェル変数VARを表示
:このシェルでは定義されていないで表示されない
$ exit:別シェルからログアウト
exit
$ export VAR:環境変数VARを定義
$ bash:別のシェルを起動
$ echo $VAR:変数VARを表示
Linux:環境変数VARとなっているため表示される
$ exit:別シェルからログアウト
exit
$ unset VAR:変数VARを削除
$ echo $VAR:変数VARを表示
:削除されたため表示されない
環境変数PATH
Linuxでは、独立したプログラムとして存在するコマンド(外部コマンド)が
どこに保存されているかを、環境変数PATHに指定されたディレクトリを順番に調べ見つます。
環境変数PATHでは通常、ディレクトが「:」で区切られて設定されており、
実際にフルパスを指定せずに、コマンドを入力すると、環境変数PATHに書かれている
ディレクトリを左から順に、入力されたコマンドと同名のプログラムファイルが探し、
存在すればそれが実行されます。
[コマンド]
$ echo $PATH
[実行例]環境変数PATHを表示する
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin
環境変数PATHへはexportコマンドでコマンドを探すディレクトリを追加することが可能です。
‘export PATH=$PATH:値’
「$PATH」部分には、現在設定されている値に変換されますので、$PATHの他に
検索ディレクトリ追加するという事になります。
[コマンド]
$ export PATH=$PATH:/usr/local/test
$ echo $PATH
[実行例]
環境変数PATHに「/usr/local/test」ディレクトリを追加する場合
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/test
環境編にPATHに使用したいプログラムの保存されているディレクトリを追加することで、
そのプログラムを使用する際に、フルパスを指定しなくて実行できるようになります。
このように環境変数PATHにディレクトリを追加する事を「パスを通す」と言います。
なお、セキュリティ上の観点から環境変数PATHにはカレントディレクトリ(.)は含まれません。
カレントディレクトリにあるプログラムを実行する時には、カレントディレクトリを意味する( .)を
つけた形式でコマンドを実行します。
[コマンド]カレントディレクトリにあるプログラムを実行する
./command