InfraAcademy

InfraAcademy Blog

【Linux】exportコマンドの使い方解説!環境変数の設定をしよう

| #Linux #Linux初心者 #コマンド
Linuxをブラウザで試してみる

Linux・ネットワーク・AWSを、環境構築なしで実践学習できます

こんにちは、フルスタックエンジニアのryuです。

今回の記事では、Linuxでよく使うexportコマンドについて解説します。

Linuxを勉強していると、

「環境変数って何?」 「VAR=valueexport VAR=valueは何が違うの?」 「exportで設定した値は、ターミナルを閉じても残るの?」

と疑問に思うことがあります。

exportは、シェルで定義した変数を、そのシェルから起動するコマンドやスクリプトなどの子プロセスへ引き継げるようにするためのコマンドです。

最初は少し分かりづらいのですが、実際に変数を作って確認してみると仕組みが見えてきます。

この記事では、exportの基本的な使い方から、環境変数の確認方法、PATHの追加、設定を永続化する方法まで順番に解説します。

Linuxのexportコマンドとは?

exportは、シェル変数に「子プロセスへ引き継ぐ」という属性を付けるためのコマンドです。

よく使う書き方は次のとおりです。

export 変数名=

例えば、NEW_VARという変数にHello worldを設定する場合は、次のように実行します。

export NEW_VAR="Hello world"

設定した値は、echoコマンドで確認できます。

echo "$NEW_VAR"

実行結果は次のようになります。

Hello world

Linuxの設定手順などを見ていると、

export PATH=...
export JAVA_HOME=...
export AWS_REGION=...

のようなコマンドが出てくることがあります。

このように、プログラムやコマンドから参照したい値を環境変数として渡すときにexportを利用します。

そもそも環境変数とは?

exportを理解するには、まず環境変数について知っておく必要があります。

環境変数とは、OS上で動くプログラムが参照できる設定値のようなものです。

例えば、Linuxでは次のような環境変数があります。

HOME
PATH
USER
LANG
SHELL

HOMEにはユーザーのホームディレクトリ、PATHにはコマンドを探すディレクトリなどが設定されています。

実際に確認してみましょう。

echo "$HOME"

例えば、次のように表示されます。

/home/ryu

PATHも同じように確認できます。

echo "$PATH"

環境変数は、Linux自体だけではなく、PythonやJava、AWS CLIなど、さまざまなプログラムから利用されます。

シェル変数と環境変数の違い

ここがexportで一番分かりづらいところだと思います。

Bashでは、次のように書くだけでも変数を作れます。

MY_VAR="Hello"

これでも、

echo "$MY_VAR"

と実行すれば値は表示されます。

Hello

では、なぜexportが必要なのでしょうか。

MY_VAR="Hello"だけで作った変数は、基本的に現在のシェル内で利用するシェル変数です。

一方、

export MY_VAR="Hello"

とすると、そのシェルから起動した子プロセスにもMY_VARを引き継げるようになります。

イメージすると次のようになります。

現在のBash
│
│ export MY_VAR="Hello"
│
├─ Python
│    └─ MY_VARを参照できる
│
├─ シェルスクリプト
│    └─ MY_VARを参照できる
│
└─ 別のBash
     └─ MY_VARを参照できる

つまり、exportは単純に「変数を作る」というより、その変数を子プロセスにも渡せるようにする役割を持っています。

exportコマンドの基本的な使い方

環境変数を設定するときは、次のように実行します。

export NEW_VAR="Hello world"

変数名と値の間にスペースは入れません。

次の書き方は正しくありません。

export NEW_VAR = "Hello world"

Linuxのシェルでは、スペースにも意味があります。

基本的には、

変数名=

と続けて書くと覚えておきましょう。

値にスペースが含まれる場合は、次のようにダブルクォートで囲むと分かりやすいです。

export MESSAGE="Hello Linux"

確認してみます。

echo "$MESSAGE"
Hello Linux

変数を作ってからexportすることもできる

次のように、先にシェル変数を作ることもできます。

MY_VAR="Hello"

そのあと、

export MY_VAR

と実行すれば、MY_VARを子プロセスへ引き継げる環境変数として扱えます。

つまり、次の2つはよく似た使い方になります。

MY_VAR="Hello"
export MY_VAR
export MY_VAR="Hello"

普段は1行で書ける後者の方が簡単ですが、「exportは変数を子プロセスへ渡せるようにするもの」と理解するには、2行に分けて考えると分かりやすいと思います。

exportした環境変数を確認する

設定した環境変数を確認する方法はいくつかあります。

よく使うのは次の3つです。

  • echo
  • printenv
  • env

echoで特定の変数を確認する

特定の変数だけ確認したい場合は、echoが簡単です。

echo "$NEW_VAR"

変数名の前に$を付けることで、その変数に入っている値を展開できます。

printenvで確認する

printenvを実行すると、現在の環境変数を一覧で確認できます。

printenv

特定の環境変数だけ確認することもできます。

printenv HOME
printenv PATH

envで確認する

envでも環境変数を一覧表示できます。

env

環境変数が多い場合は、grepと組み合わせると探しやすくなります。

env | grep PATH

環境変数を確認する方法については、こちらの記事でも詳しく解説しています。

関連:【Linux】環境変数を確認する方法を解説!”envコマンドとprintenvコマンド”

export -pでexportされている変数を確認する

Bashでは、export -pを使って、現在exportされている変数を確認できます。

export -p

実行すると、次のような形式で表示されます。

declare -x HOME="/home/ryu"
declare -x PATH="..."
declare -x USER="ryu"

環境によって表示内容は異なりますが、どの変数にexport属性が付いているのかを確認できます。

自分で設定した変数だけ探したい場合は、grepと組み合わせてもよいでしょう。

export -p | grep MY_VAR

export -nでexport属性を外す

-nオプションを使うと、変数そのものを削除せず、export属性だけを外せます。

例えば、次の環境変数を作ります。

export MY_VAR="Hello"

続いて、

export -n MY_VAR

と実行します。

これでMY_VARは現在のシェルには残りますが、新しく起動する子プロセスへ引き継ぐ対象ではなくなります。

そのため、

echo "$MY_VAR"

では値を確認できます。

変数自体を削除したい場合はexport -nではなく、unsetを利用します。

unset MY_VAR

export -nunsetは動作が違うので注意しましょう。

export -fでシェル関数をexportする

Bashでは、-fオプションを使ってシェル関数をexportすることもできます。

まず、関数を作ります。

hello() {
    echo "Hello Linux"
}

続いて、次のように実行します。

export -f hello

これで、子として起動したBashでも関数を利用できるようになります。

bash -c 'hello'

実行結果は次のとおりです。

Hello Linux

ただし、export -fは普段のLinux操作で頻繁に使うものではありません。

初心者のうちは、まず通常の環境変数を扱えるようになれば十分です。

PATHへディレクトリを追加する

exportの実例としてよく登場するのが、PATHの設定です。

PATHには、Linuxがコマンドを探すディレクトリが登録されています。

現在のPATHは次のように確認できます。

echo "$PATH"

例えば、/home/ryu/binをPATHへ追加したい場合は、次のように設定できます。

export PATH="$PATH:/home/ryu/bin"

ここで、

$PATH

を書いているのがポイントです。

現在設定されているPATHを残したまま、末尾へ/home/ryu/binを追加しています。

もし、

export PATH="/home/ryu/bin"

としてしまうと、もともと設定されていたPATHを上書きしてしまいます。

すると、普段使えていたコマンドが見つからなくなることもあります。

PATHを変更するときは、現在の値を残したまま追加しているか確認しましょう。

exportで設定した環境変数はいつまで残る?

ここも初心者がよく迷うところです。

ターミナルで、

export MY_VAR="Hello"

と実行しても、その設定がずっと保存されるわけではありません。

基本的には、そのシェルを終了すると設定した値は失われます。

新しいターミナルを開いたときにも同じ環境変数を使いたい場合は、利用しているシェルの設定ファイルへ記述します。

例えばBashであれば、環境に応じて~/.bashrcなどへ設定します。

export MY_VAR="Hello"

PATHを追加する場合なら、

export PATH="$PATH:$HOME/bin"

のように書けます。

設定ファイルを変更したあと、現在のシェルへ反映したい場合は、例えば次のように実行します。

source ~/.bashrc

ただし、どの設定ファイルが読み込まれるかは、利用しているシェルやログイン方法によって異なります。

「exportしたのに、新しいターミナルを開いたら消えた」という場合は、設定ファイルへ書いているか確認してみましょう。

1つのコマンドだけ環境変数を渡す方法

環境変数をずっと設定する必要がなく、「このコマンドを実行するときだけ値を渡したい」という場合もあります。

その場合は、次のようにコマンドの前へ変数を書けます。

MY_VAR="Hello" python app.py

この場合、MY_VARpython app.pyを実行するプロセスへ渡されます。

現在のシェルへ長く設定しておく必要がない場合は、この書き方も便利です。

例えば開発環境と本番環境で設定値を変えたり、一時的に動作を確認したりするときに使えます。

パスワードや秘密情報をexportするときは注意する

アプリケーションの設定では、環境変数にAPIキーやパスワードなどを渡すことがあります。

ただし、

export PASSWORD="..."

のようなコマンドをそのまま入力すると、利用しているシェルの設定によってはコマンド履歴に残る可能性があります。

また、秘密情報を.bashrcなどへ平文で保存すれば、そのファイルを読める人から確認できてしまいます。

環境変数だから自動的に安全になるわけではありません。

本番環境で秘密情報を扱う場合は、利用しているクラウドや実行環境のシークレット管理機能なども検討しましょう。

exportコマンドの主なオプション

Bashでよく使うexportのオプションをまとめます。

オプション 説明
-p exportされている変数を表示する
-n 変数のexport属性を外す
-f シェル関数をexport対象として扱う

オプションの数は多くありません。

普段の操作では、

export 変数名=

がほとんどなので、まずは基本形を覚えておけば大丈夫です。

exportコマンドは実際に動かして覚えよう

環境変数は、文章だけで理解しようとすると少し分かりづらいと思います。

まずは自分で次のコマンドを実行してみてください。

export MY_NAME="ryu"
echo "$MY_NAME"
printenv MY_NAME

続いて、

export -n MY_NAME
echo "$MY_NAME"
printenv MY_NAME

と実行すると、「変数自体は残っているけれど、export属性は外れている」という違いを確認できます。

さらに、

unset MY_NAME
echo "$MY_NAME"

まで試すと、export -nunsetの違いも理解しやすくなります。

Linuxは、このようにコマンドを実際に入力して結果を確認すると、一気に分かりやすくなります。

Linuxを手を動かしながら学ぶならInfraAcademy

Linuxコマンドを覚えるときに、コマンド一覧だけを眺めて暗記しようとすると、なかなか身につきません。

私もLinuxを勉強し始めたころは、コマンドの意味を読んでも「結局いつ使うの?」となることがよくありました。

exportであれば、実際に環境変数を作って、echoprintenvで確認してみる。PATHを変更したら、どのように値が変わったのか見てみる。

このように自分で操作して結果を確認する方が、Linuxは理解しやすいです。

InfraAcademyのLinux講座では、ブラウザ上のLinux環境を使いながら、ディレクトリやファイル操作、権限、ユーザーとグループ、ネットワークなどを順番に学べます。

自分のPCにLinux環境を作らなくてもコマンドを実行できるので、「Linuxを勉強したいけど、環境構築の段階でつまずいてしまった」という方にもおすすめです。

InfraAcademyのLinux講座を見る

↓InfraAcademyの講座の一部です。

上記以外にも、ネットワークやAWS、サーバー構築など、インフラエンジニアに必要な内容を学べます。

まとめ

今回の記事では、Linuxのexportコマンドについて解説しました。

exportは、単純に環境変数へ値を入れるだけのコマンドではありません。

シェルで定義した変数を、そこから起動するコマンドやスクリプトなどの子プロセスへ引き継げるようにするために利用します。

まずは、次の使い方を覚えておきましょう。

export MY_VAR="Hello"
echo "$MY_VAR"
printenv MY_VAR
export -p

また、ターミナル上でexportした値は、基本的にそのシェルを終了すると失われます。毎回利用したい設定は、必要に応じて.bashrcなどの設定ファイルへ記述します。

exportは、PATHの設定やアプリケーションの設定値を渡すときなど、Linuxを使っているとさまざまな場面で登場します。

最初は「環境変数」という言葉が難しく感じるかもしれませんが、実際に変数を作って、子プロセスへ値が渡ることを確認すると理解しやすくなります。

関連:インフラ学習におすすめのサイトInfraAcademy(インフラアカデミー)

Next Action

記事で読んだ内容を、講座で実装してみましょう

InfraAcademyでは、ブラウザ上でLinuxやネットワークの実践環境を使いながら学習できます。無料で始められる講座から、学習の流れを試せます。

この記事を書いた人

ryu

InfraAcademy運営 / エンジニア

エンジニア歴10年。Linux、ネットワーク、クラウドを中心に、実務で役立つインフラ技術を初心者にもわかりやすく解説しています。

X: @ryu63614894

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

ログインすれば無料で始められる講座です。気になったテーマから手を動かして学べます。

講座一覧を見る