いまさらですが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