ひとことで言うと

# 一時的に設定(現在のセッションのみ)
export MY_VAR="hello"

# 永続化(ログイン後も有効にする)
echo 'export MY_VAR="hello"' >> ~/.bashrc
source ~/.bashrc

やりたかったこと / 現象

Linuxで環境変数を設定したいが、ターミナルを閉じると消えてしまう。 または、特定のコマンドに必要な環境変数を永続的に反映したい。


環境

  • OS: Ubuntu 22.04 / Debian 12(他のLinuxディストリビューションでも同様)
  • シェル: bash / zsh

解決策

1. 現在の環境変数を確認する

# すべての環境変数を表示
env

# 特定の変数を確認
echo $HOME
echo $PATH
echo $MY_VAR

2. 一時的に環境変数を設定する(セッション内のみ)

export MY_VAR="hello"
echo $MY_VAR
# → hello

ターミナルを閉じると消える。

3. .bashrc に書いて永続化する(ユーザー限定)

echo 'export MY_VAR="hello"' >> ~/.bashrc
source ~/.bashrc

.bashrc はログインシェルではなく、インタラクティブシェルで毎回読み込まれる。

4. .bash_profile / .profile に書く(ログインシェル)

echo 'export MY_VAR="hello"' >> ~/.bash_profile
source ~/.bash_profile

SSH接続時や初回ログイン時に読み込まれる。

5. /etc/environment でシステム全体に設定する

sudo nano /etc/environment

ファイルに以下のフォーマットで追記する(export は不要):

MY_VAR="hello"
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

再起動または再ログイン後に有効になる。

6. 環境変数を削除する

unset MY_VAR
echo $MY_VAR
# → (空白)

7. コマンド実行時だけ一時的に設定する

MY_VAR="hello" node app.js

このプロセスのみに有効で、シェルの環境変数には影響しない。


よくあるエラーと対処

export: not valid in this context

export: 'MY_VAR=hello world' is not valid in this context

原因: スペースを含む値をクォートで囲んでいない。
対処:

export MY_VAR="hello world"

source: command not found

sh で実行しているとき source が使えない。
対処: . を使う(同義)

. ~/.bashrc

再起動後に環境変数が消える

.bashrc に書いたのに消える場合、ログインシェルが .bash_profile だけ読んでいる可能性がある。

対処: .bash_profile から .bashrc を呼び出す。

# ~/.bash_profile に追記
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

PATH が壊れて lscd が使えなくなった

# 現在のセッションで一時的にPATHを修復
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

その後 .bashrc のPATH設定を確認・修正する。


よくある質問

Q: export と代入(VAR=value)の違いは何ですか?
VAR=value は現在のシェルのみ有効で、子プロセスには引き継がれません。export VAR=value にすると子プロセス(コマンドやスクリプト)にも環境変数が渡されます。

Q: zsh を使っているときはどのファイルに書けばいいですか?
zsh では ~/.zshrc に書くと永続化できます。ログインシェルなら ~/.zprofile または ~/.zlogin も使えます。

Q: envprintenv の違いは何ですか?
どちらも環境変数の一覧を表示しますが、printenv 変数名 で特定の変数だけ表示することもできます。env は新しい環境で別のコマンドを実行するためにも使えます。

Q: .bashrc と .bash_profile どちらに書くのが正しいですか?
ターミナルを開くたびに有効にしたい場合は .bashrc、SSHログインや初回ログイン時だけでよい場合は .bash_profile に書きます。多くの場合 .bashrc で十分です。

Q: システム全体に環境変数を設定するにはどうすればいいですか?
/etc/environment に書くと全ユーザーに適用されます。/etc/profile/etc/profile.d/*.sh も使えますが、/etc/environment が最もシンプルです。

Q: Node.jsやPythonでも同じ環境変数が使えますか?
はい。export で設定した環境変数は process.env.MY_VAR(Node.js)や os.environ['MY_VAR'](Python)でアクセスできます。


関連記事

おすすめのVPS/ドメイン/スクール

VPSを使って本番環境を構築するなら、以下のサービスがおすすめです。