Linux / macOS の環境変数まとめ
了解です。WordPress 記事用に箇条書き入りで整理し、過剰に詳しく書きます。罫線なしです。
Linux / macOS の環境変数まとめ
環境変数とは、シェルやプログラムが動作するために参照する設定情報です。システムの動作に影響する値を保存したり、プログラム間で情報を共有するために使われます。UNIX 系 OS では、複数のプログラムが連携して動くため、共通の設定情報を渡す仕組みとして生まれました。
環境変数の特徴や使い方を詳しく見ていきます。
環境変数の役割
- プログラムやシェルが参照する設定情報を提供する
- 子プロセスやスクリプト間で情報を共有できる
- コマンド検索パスやホームディレクトリ、アプリケーションの設定などを指定できる
例:
HOME:ユーザーのホームディレクトリPATH:コマンドを検索するディレクトリの順序JAVA_HOME:Java のインストール場所
なぜ環境変数ができたのか
- UNIX 系 OS は複数のプログラムが連携して動く
- プログラムごとに設定を書き込むのは非効率
- 共通の設定情報を渡すため「共有メモ帳」のような仕組みとして環境変数が生まれた
環境変数の種類
- 一時変数
- シェル内で作成
- そのシェルだけで有効
- 他のシェルや子プロセスには渡らない
MYVAR=hello echo $MYVAR - 環境変数(export)
- 子プロセスにも引き継がれる
export MYVAR=hello bash -c 'echo $MYVAR' # hello が表示される - 永続化環境変数
- ログイン時に自動で読み込まれる
- ユーザー単位:
~/.bashrc,~/.zshrc,~/.profile - システム全体:
/etc/profile,/etc/environment
複数作成と連結
- 複数の環境変数を作成可能
- PATH のようにコロン
:で複数値を連結できる
export PATH=/opt/myapp/bin:$PATH
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
export EDITOR=vim
呼び出し方
- シェル内
echo $HOME echo $JAVA_HOME - Python
import os print(os.environ['JAVA_HOME']) - C言語
#include <stdlib.h> char* java_home = getenv("JAVA_HOME");
応用例
- コマンド検索パスの変更
- Java バージョンの切り替え
- 使用するエディタやアプリケーションの設定
- スクリプト内で設定を共有して自動化
確認方法
envコマンドprintenvコマンド- 現在設定されている環境変数を一覧で確認できる
まとめ
- 環境変数はシェルやプログラムが参照する設定情報
exportで子プロセスに渡すことができる- 複数作成可能で、値を連結して順序を指定できる
- 永続化すればログインごとに自動設定される
- UNIX 系 OS で効率的にプログラム間情報を共有するために生まれた仕組み
環境変数を理解すると、シェルスクリプトやアプリケーションの自動化が格段にやりやすくなります。
