【Linux】環境変数とは?$PATHの意味や使い方、通す方法を解説
この記事からわかること
- Linux:環境変数とは?
- 環境変数とシェル変数の違い
- 意味や使い方
- $PATHを通す方法
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
環境変数とは?
ポイント
- 別のシェル間でも値を引き継げる変数
- exportを使って定義する
- 基本的な使い方はシェル変数と同じ
Linuxでは規定の値を簡単に参照できるようにコマンドライン上で格納、参照できる変数というものが用意されています。値を変数に入れておくことで値を保持してくれるだけでなく、計算したり、表示させたりといったことができるようになります。
Linuxでは基本的に変数は実行しているシェル上でしか扱うことができません。なので別のシェルを起動させると変数は引き継がれず再定義しなければいけません。
その変数をシェル上で起動した別のシェルなどからでも扱えるようにしてあるのが環境変数です。しかしあくまでシェル上で起動したシェルなど、設定したシェルと関連のあるものに限るので注意してください。
ちなみにシェル上でしか扱えない変数のことをシェル変数と言います。
環境変数の定義の仕方
まずはLinuxでのシェル変数の定義方法を見てみます。今回は変数名local
の中に数値の2
を代入しています。
$ local=2
Linuxでの変数の定義では=
の両端などに (空白)
を挟むとエラーになってしまうので注意してください。
$ local= 1
zsh: command not found: 1
格納した変数を表示させるには定義した名前の先頭に$
をつけて参照します。echo
コマンドは引数の値を表示させるコマンドです。
$ echo $local
1
シェル変数ではなく環境変数として定義するにはexport
を使用して定義します。参照方法はシェル変数と変わりません。
$ export num=2
環境変数の有効範囲
先述しましたがシェル変数と環境変数では扱える有効範囲が異なります。例として途中でシェルを切り替えてみます。
別シェルにした時の変数の挙動
$ local="これはローカルです"
$ export str="これは環境変数です"
// シェルを切り替え
$ bash
bash $ echo $local
// 何も表示されない
bash $ echo $str
これは環境変数です
// シェルを戻す
bash $ exit
このようにシェルを切り替えた際にシェル変数は参照することができませんが、環境変数に格納した値は問題なく表示させることができます。
中身を変更しても引き継がれない
$ export str="テスト"
bash $ bash
bash $ str="変更しました"
bash $ echo $str
変更しました
bash $ exit
$ echo $str
テスト
別のシェルを起動させて環境変数の中身を変更することも可能ですが、デフォルトのシェルに戻した際には変更は保持されず元の値が表示される点に注意してください。もし切り替えたシェル側で変更を引き継がせたい場合は再度環境変数として定義すればOKです。
よく使う定義済みの変数
変数の中には起動時に元々定義済み(値が格納済み)の変数が用意されています。先によく使うものを紹介しておきあmす。
変数名 | 保持している値/役割 |
---|---|
HOME | ホームディレクトリ |
USER | ユーザー名 |
UID | ユーザーID |
PATH | コマンドサーチパス |
PWD | カレントディレクトリのパス |
$ echo $HOME
/Users/username
$ echo $USER
username
$ echo $PWD
/Users/username/desktop
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:...
これらは環境変数として定義されているのでそのシェルからでも参照することができます。
$PATHの意味と使い方
定義済みの変数の中でも重要なのが:
を区切り文字にさまざまなパスが登録されている$PATH
です。
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:...
この変数はコマンドサーチパスとも呼ばれ名称の通りコマンド実行時に登録されているパスを検索し、該当するコマンドを実行できるようにする役割を持っています。
組み込み済みのコマンドと追加されたコマンド
そもそもコマンドには組み込み済みのコマンドと追加されたコマンドの2種類が存在します。両者を識別するには実行ファイルを検索できるwhich
コマンドを使用します。
$ which echo
echo: shell built-in command
$ which npm // npmを既に$PATHに通していた場合
/Users/username/.nodebrew/current/bin/npm
組み込み済みのコマンドはshell built-in command
と表示され、追加されたコマンドは実行されているファイルのパスが返ってきます。
例えばnpm
コマンドの実行ファイルは/Users/username/.nodebrew/current/bin/npm
にあるので以下のように実行するのが本来の形になります。
$ /Users/username/.nodebrew/current/bin/npm -v
結果 : 8.1.0 // バージョンを取得する npm -v を実行
$PATHのメリット
毎度記述が面倒な実行ファイルまでのパスを登録しておけるのが$PATH
です。コマンドをnpm
だけで実行できるように/Users/username/.nodebrew/current/bin/
の部分を$PATHに登録していきます。
登録する際はユーザー名が変更になっても良いように$HOME
を使うことをおすすめします。また既存の$PATH
の中身を完全に上書きしないように末尾に:$PATH
として現在の値も再格納することも忘れないようにしてください。
export PATH=$HOME/.nodebrew/current/bin/:$PATH
これでパスを通すことができたので次からはnpm
だけで実行すると$PATH
内を検索し、登録済みの/Users/username/.nodebrew/current/bin/
の中にnpm
が存在するので詳細なパスを意識することなく実行できるようになります。
$PATHの中身のデフォルトから設定する
しかしこのままではシェルを終了したタイミングで更新した$PATH
の中身がリセットされてしまいます。「zsh」の場合は「.zshrc」を「bash」の場合は「.bash_profile」に環境変数を更新するコマンドを記述しておくことで起動時に自動実行されパスを登録してくれます。
方法は簡単で該当ファイルをviエディタで開き中に環境変数を定義するコマンドを記述して閉じるだけです。
// viでファイルを開く
$ vi ~/.zshrc
// 中にペースト
export PATH=$HOME/.nodebrew/current/bin:$PATH
// 保存して閉じる
:wq
// 現在開いているターミナルに反映
$ source ~/.zshrc
環境変数一覧
変数名 | 保持している値/役割 |
---|---|
HOME | ホームディレクトリ |
HOSTNAME | ホスト名 |
HISTSIZE | コマンド履歴の最大数 |
HISTFIlE | コマンド履歴を格納しているファイル |
HISTFILESIZE | コマンド履歴を格納しているファイルに保存する履歴数 |
LANG | ロケール |
LOGNAME | ログインシェルのユーザー名 |
USER | ユーザー名 |
UID | ユーザーID |
PATH | コマンドサーチパス |
PS1 | プロンプトの表示形式 |
PS2 | 複数行のプロンプトの表示形式 |
PWD | カレントディレクトリのパス |
EDITOR | デフォルトで起動するエディタを設定する環境変数 |
DISPLAY | GUIアプリケーションを表示する先のXサーバを指定する環境変数 |
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。