LinuC Level1 v10.0 対策コース(パート1)36/39
環境変数について
こちらでは、環境変数について解説します。
慣れないうちは少し難しいかもしれませんが、開発をしていく上では頻繁に使用するものですので、是非覚えていきましょう。
シェル変数
シェル変数は、現在使用しているシェルでのみ有効な変数です。それらの変数をシェルが管理しており、プロセスが終了するとそこで作成されたシェル変数は消えてしまいます。たとえば、bashをお使いの場合、bash内で作成したシェル変数はzsh内では無効となります。また、同じbashであっても、別のプロセス(PIDが異なる)であれば無効です。
※ プロセスとは、実行中の処理の単位を指します。シェルのプロセスは、ターミナルが起動した時点で(ログインしたあと)開始し、ターミナルを終了すると消えます。各プロセスには、プロセスID(PID)というプロセスを識別するためのid(識別子)があります。PIDは、ps
コマンドで確認できます。
つまり、別々のターミナルでbashを起動しているという状況では、それぞれのbashは別のプロセスであり、一方のシェル変数は他方では無効ということになります。
実際にシェル変数を作成するには[変数名]=[値]
という書式でコマンドを実行します。
# 'test'という値を代入したTESTという変数名のシェル変数を作成します。
TEST='test'
# 作成できたか確認します。(変数名の前に'$'をつけないと、変数名を文字列として標準出力することになってしまいます)
echo $TEST
test
setコマンド
set
は、シェル変数や環境変数を確認したりシェルオプションを確認したりするコマンドです。
オプション
オプション | 説明 |
---|---|
なし | 既存のシェル変数を一覧表示する |
+o | 指定したシェルオプションを無効にする (以下のオプションも-で有効、+で無効にできます) |
-a ,+a | allexportオプションを有効・無効にする |
-f , +f | noglobオプションを有効・無効にする |
-u ,+u | nounsetオプションを有効・無効にする |
-v, +v | verboseオプションを有効・無効にする |
-x, +x | xtraceオプションを有効・無効にする |
シェルオプション
シェルオプションとは、シェルの動作の設定です。以下にそれらの一部を示しています。
シェルオプション | 説明 |
---|---|
allexport | 作成・変更したシェル変数を自動的にエクスポートする |
noglob | ファイル名置換を無効にする(ファイル名置換とは、ファイル名にメタ文字を使ったファイルを展開することです) |
nounset | 未定義の変数を参照した場合、エラーを表示する |
verbose | コマンド実行前に、入力行を表示する |
xtrace | コマンドと引数の展開処理を表示する |
unsetコマンド
unset
は、既存のシェル変数を削除するためのコマンドです。
オプション
オプション | 説明 |
---|---|
-f | シェル関数(function)を指定する (シェル変数は指定できない) |
-v | シェル変数(variable)を指定する (シェル関数は指定できない) |
echo $TEST
test
# シェル変数TESTを削除します。('$'は必要ありません)
unset TEST
# TESTを表示しようと試みますが、既に削除されているので何も表示されません。
echo $TEST
環境変数
シェル変数が作成したシェルでのみ有効な変数であったのに対し、環境変数は子プロセスや別のシェルにも引き継がれる、すべてのプロセスで有効な変数です。よって、bashで作成した環境変数は、シェルをzshに変更したとしても有効なままです。
env(printenv)コマンド
env
は新しい環境でコマンドを実行するためのもので、引数なしで実行すると環境変数を一覧表示します。 printenv
は指定した環境変数を表示するためのコマンドです。特定の変数を表示したい場合は、echo
を使用します。
# ホームディレクトリ($HOMEという変数に代入された値)を確認します。
echo $HOME
/Users/Envader
exportコマンド
シェル変数を環境変数にエクスポートするには、export
コマンドを使用します。既存のシェル変数の変数名のみをエクスポートすると、代入されている値がそのまま引き継がれます。
一方、変数の新規作成と環境変数へのエクスポートを同時に行う場合には変数名='値'
という形でそれぞれを明示的に宣言する必要があります。
# 既存のTESTというシェル変数をエクスポートするケース
export TEST
# 未定義の変数をエクスポートするケース
export TEST='test'
~/.bash_profileと~/.bashrc
~/.bash_profile
は、ログイン時にのみ読み込まれるファイルです。主に環境変数やログイン時に必要な設定を記述するためのファイルです。環境変数は全てのシェル(プロセス)で有効であるため、ログイン時に一度だけ読み込めばいいということになります。
~/.bashrc
には、シェル変数やターミナルのテーマ、エイリアス、その他プラグインなどを記述するためのファイルです。これらは、シェル(今回の場合bash)によって有効・無効が変わります。
よって、これらはシェルを起動するタイミングで読み込めばいいということになります。
また、これらの設定ファイルの名前はログインシェルによります。bashを使用している場合は ~/.bash_profile
や ~/.bashrc
を、zshを使用している場合は ~/.zsh_profile
や ~/.zshrc
をそれぞれ使用します。
alias(エイリアス)
alias(エイリアス)は、コマンドに別名をつけて、その別名でコマンドを実行できる機能です。MacやWindowsをお使いの方には、ショートカットと同じようなものだと考えていただけるとわかりやすいでしょう。エイリアスは、コマンドのショートカットのようなものです。
長いコマンドだと、それを全てタイプするのは面倒です。また、オプションなどを全て覚えているか、正確にタイプして実行できるかというと、怪しいところです。エイリアスを作成・使用することで、そういった不便さから解放され時短にもつながります。
以下の例では、alias
コマンドやunalias
コマンドなどの挙動を確認します。
# 'ls -l' コマンドのエイリアスとして、'l'を作成します
alias l='ls -l'
# 作成したエイリアスを確認してみます。
alias l
l='ls -l'
l sample_file
-rw-r--r-- 1 envader redavne 0 May 17 05:07 sample.txt
# 作成したエイリアスを削除するには、unaliasコマンドを使用します。
unalias l
また、上記で説明した通り、~/.bashrc
などのファイル内でエイリアスを設定しておき、シェル起動時にそのファイルを読み込むことで有効にすることもできます。
~/.bash_aliases
エイリアスは、~/.bashrc
にも記述できますが、エイリアス専用ファイルとして~/.bash_aliases
が用意されています。
~/.bash_aliases
を利用する場合は、~/.bashrc
内でシェル起動時に~/.bash_aliases
を読み込む処理を記述しておく必要があります。
「パスを通す」とは?
何かしらのプログラムをインストールした際に「パスを通す」という言葉を聞いたことがある方もいらっしゃるかもしれませんが、これは正確に言うと「環境変数PATHに該当の実行ファイルが存在するディレクトリのパスを追加する」と言うことです。
この環境変数「PATH」に検索パスを保存しておくことで、実行ファイル名を入力した時に、システムが実行ファイル名をPATHから自動的に検索し、コマンドを実行することが出来ます。
例として、ls
コマンドを見ましょう。
#lsコマンドがあるディレクトリ
which -a ls
/bin/ls
上記のls
コマンドには環境変数にパスが通っているためls
だけでコマンドを実行できます。もしパスが通っていなければ毎回、絶対パスを入力しなくてはいけないため、とても面倒です。
このようにパスの設定やエイリアスの設定は作業効率を高めてくれる、とても便利なものなのです。
まとめ
環境変数は、プログラムの実行や環境設定に欠かせない概念です。シェル変数との違いや、環境変数を扱うためのコマンドやファイルの説明を行いました。また、エイリアスやパスの設定についても解説しました。
環境変数の理解は、システム管理者や開発者にとって必須の知識であり、この記事で学んだことを実際の開発に役立てていただければ幸いです。
問題を解くためには、十分な画面サイズのPC環境をご利用下さい。