177
174

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

いまさらですがLinuxで環境変数を設定したい

Posted at

いまさらですがlinuxで環境変数を設定するときのいろいろです。

##環境変数とシェル変数
変数を設定したい、というとき、変数には2種類あります。
それが環境変数シェル変数です。
この2つは設定の方法が違います。また、変数が適応される範囲(スコープ)も異なります。
以下、NAME といういう変数に Taro という値を保持例で説明します。

###シェル変数

1  $ NAME=Taro

このプロセス内でのみ変数は有効となります。
子プロセスには引き継がれません。このプロセスから新たにプロセスを立ち上げても、新たに立ち上げたプロセス内ではNAME変数は参照できません。

###環境変数

1  $ NAME=Taro
2  $ export NAME
3  # OR
4  $ export NAME=Taro

子プロセスでも変数を参照することができます。このプロセスから新たに立ち上げたプロセス内でもNAME変数を参照できます。
しかし、子プロセス内でNAME変数の値を変更しても親プロセス内でのNAME変数の値は変わりません。子プロセスが立ち上がるときに変数がコピーされるイメージです。

環境変数の説明コードに書いてあるように、シェル変数を定義し、その変数をexportすることでも環境変数となります(1、2行目)。
4行目のようにまとめて書くこともできます。

##設定した環境変数を表示する

###echoコマンド

$ echo $NAME

echoコマンドは引数でもらった値を表示することができます。
変数の中身を表示するときには、変数の前に$が必要です。

###printenvコマンド

$ printenv

環境変数にのみ対応しています。引数なしで実行することで環境変数の一覧を表示することができます。
また環境変数名を引数に渡すことで中身を見ることができます($はいりません)。

###envコマンド

$ env

環境変数にのみ対応しています。引数なしで実行することで環境変数の一覧を表示することができます。

###setコマンド

$ set

環境変数とシェル変数の一覧を表示することができます。

##変数の削除

$ unset NAME

環境変数も、シェル変数も削除することができます。
$はいりません。

##毎回設定するのは面倒
上記の設定方法だと、ターミナルを立ち上げる度に変数を設定する必要があります。
設定ファイルに書くことで、毎回手動で設定する必要がなくなります。

linuxにはいくつか設定ファイルが存在し、読み込まれる順番やタイミングが決まっています。
詳しくは以下の記事を・・・
https://qiita.com/yunzeroin/items/480a3a677f78a57ac52f
https://qiita.com/magicant/items/d3bb7ea1192e63fba850

~/.bash_profileに環境変数、~/.bashrcにシェル変数を書いておきます。
以下、環境変数の例です。

# .bash_profile

NAME="Taro"
export NAME

これで、ログインするときにこの環境変数が設定されます。

※~/.bash_profileに書いただけでは読み込まれません。一度ログアウトしてログインしなおすか、以下のコマンドを実行します。

$ source ~/.bash_profile
177
174
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
177
174

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?