MENU

現在の環境変数を一覧表示してシェル設定の問題を素早く特定する手順

コマンドが「見つからない」と表示されたり、期待したツールが動かなかったりするとき、原因の多くは環境変数の設定ミスや読み込み漏れにあります。現在の環境変数を一覧表示して、想定どおりの値が入っているかを確かめることが問題特定の第一歩です。

目次

環境変数の確認が必要になる場面

次のような状況で、環境変数の一覧確認が役立ちます。

  • コマンドを実行すると command not found と表示される
  • ユーザーを切り替えたあとにツールが使えなくなった
  • シェル設定ファイル(.bashrc や .bash_profile)を編集したのに変更が反映されていない
  • スクリプトを実行すると手動実行時と挙動が異なる

こうした場面では「どの変数が、今どんな値になっているか」を把握することが解決への近道です。

環境変数を一覧表示する基本コマンド

現在のシェルセッションに設定されている環境変数を一覧表示するには、env または printenv を使います。

env
printenv

どちらも「現在のプロセスに引き渡されている環境変数」だけを表示します。export されていない変数(シェル変数)は含まれません。出力行数が多い場合は less に渡すと見やすくなります。

env | less

シェル変数・関数・エイリアスも含めた全体を調べたい場合は set コマンドを使います。環境変数に限らず、シェルセッション内で定義されたすべての変数を確認できます。

set | less

特定の環境変数だけを調べる

一覧から特定の変数を探すときは grep を組み合わせるか、printenv に変数名を直接渡します。PATH の内容を確認する場合はどちらの方法も使えます。

printenv PATH
echo $PATH

printenv PATH は変数が未定義のとき何も出力せず終了コード 1 を返すため、スクリプト内での確認に向いています。echo $PATH は未定義でも空行を返すため、対話操作での素早い確認に便利です。

名前の一部しか分からないときや複数の変数をまとめて絞り込みたいときは env | grep が便利です。

env | grep -i java

これで JAVA_HOME や JAVA_OPTS のように「java」を含む変数を一括で確認できます。大文字・小文字を区別せず検索したい場合は -i オプションを付けます。

シェル設定ファイルとの突き合わせで問題を特定する

「.bashrc に書いたはずなのに値が入っていない」という状況はよく起こります。読み込まれているファイルを明確にするため、どの設定ファイルが実際に処理されたかを確かめる手順が重要です。

まず、現在起動しているシェルがログインシェルかどうかを確認します。

echo $0

先頭にハイフンが付いている(例: -bash)場合はログインシェルです。ログインシェルは .bash_profile(または .profile)を読み込みます。非ログインのインタラクティブシェルは .bashrc を読み込みます。設定を書いたファイルが読み込まれる条件と一致しているかを確認してください。

bash における設定ファイルの読み込み順序は次のとおりです。

  • ログインシェル: /etc/profile → ~/.bash_profile(または ~/.profile)
  • 非ログインのインタラクティブシェル: /etc/bash.bashrc → ~/.bashrc
  • スクリプト実行(非インタラクティブ): 通常、どのファイルも自動的には読み込まれない

設定ファイルを修正したあと、変更を現在のセッションに反映させるには source コマンドを使います。

source ~/.bashrc

その後 printenv や echo $変数名 で値が変わったかどうかを確認できます。スクリプトから実行したときだけ値が入っていないケースは、「スクリプトは設定ファイルを自動的に読み込まない」という挙動が原因であることが多いです。

よくあるつまずきと対処

export を付け忘れている

シェル変数として定義しただけでは、子プロセスに引き渡されません。env で表示されない場合は、定義に export が付いているかを確認してください。

# シェル変数のまま(子プロセスに渡らない)
MY_VAR=hello

# 環境変数として export する
export MY_VAR=hello

= の前後にスペースを入れている

bash では export MY_VAR = hello のようにスペースを入れると構文エラーになります。= の前後にスペースは入れないようにしてください。

su とログインシェルのオプション

一般的に、su ユーザー名 だけでは切り替え先のログインシェルが起動せず、そのユーザーの設定ファイルが読み込まれません。su - ユーザー名(ハイフンあり)とすると、切り替え先ユーザーのログインシェルとして起動し、設定ファイルが正しく読み込まれます。

sudo 経由で実行すると PATH が変わる

sudo はデフォルトで安全な PATH に切り替えるため、一般ユーザーの PATH に追加したディレクトリは引き継がれません。sudo 実行時の環境変数を確認するには次のコマンドを使います。

sudo env | grep PATH

必要であれば sudo -E オプションを使うと、現在の環境変数を引き継いで実行できます。ただし sudoers の設定によって制限される場合があります。sudo visudo で env_reset や env_keep の設定を確認してください。

「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。

ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。

>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)

※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次