前提
この記事を書いている人は,技術記事を書くこと,および記事の内容についての知識が素人です.そのため,記事の内容は鵜呑みにせず引用した記事をたどったり,別の記事を読んだりするなど,ご自身で確認いただくようお願いします.要するに免責事項的なやつです
ところで,この記事ではubuntuにおける環境変数の設定とその関連事項について説明しますが,ubuntuに限らずLinux系なら同様にして環境変数の設定ができると思います.
前提はこのくらいで,環境変数について説明していきます.
環境変数
まず環境変数とは,OSにおける変数のようなものです.つまり,プログラムにおける変数と似たようなものです.
環境変数の確認,出力
現在設定されている環境変数を確認するにはenv
やprintenv
とコマンドを打つことで確認できます.
$ env
SHELL=/bin/bash
...(省略)
$ printenv
SHELL=/bin/bash
...(省略)
ただし,env
の方では特定の変数について出力するということはできず,特定の変数について出力するならprintenv
の方を使わないと出力されないみたいです.(まあgrep使えば検索できるけど)
$ env SHELL
env: ‘SHELL’: No such file or directory
$ printenv SHELL
/bin/bash
それもそのはず.このサイト1によるとenv
は環境変数を一時的に指定してコマンドを実行するもののようです.というわけでenv
を簡単に使ってみましょう.
envの実験
(2022/12/01追記:がっつりqiitaという文字を間違えてました...ごめんなさい.左上に書いてあるのにね.面白いのでそのまま残します.クイッタ)
以下のようなshellscriptを用意します.
#!/bin/bash
echo $QUIITA
ちなみに#!/bin/bash
の部分は,Shebangといいます.この記事では触れないので,気になった方は調べてみてください.気にならなかった方はお祈りやら念仏やらとして,ファイルでbashを使いたいときはこう書くものだと認識してください.
このファイルには実行権限をchmod
で与えておいてください.知らない人はググってくれ
何も考えず実行した場合とenv
を使って出力した結果が以下の通りです.
$ ./envtest.sh
$ env QUIITA='quiita' ./envtest.sh
quiita
このように環境変数を指定して実行することができました.ちなみにこの後printenv QUIITA
としても何も出力されませんでした.確認してみてください.
環境変数についてはこのくらいで,続いてメインの題材である環境変数の設定について説明していきます.
環境変数の設定
環境変数を設定するには,bashで環境変数名=値
とし,これをexport
するとできます.
$ printenv QIITA
$ QUIITA=quiita
$ export QUIITA
$ printenv QUIITA
quiita
export 環境変数名=値
としても問題なく設定できます
$ printenv QUIITA
quiita
$ export QUIITA=quiiiiiita
$ printenv QUIITA
quiiiiiita
同じ環境変数名を改めてexport
すれば上書きをできるみたいです.
ただ,値で空白文字を含む場合,シングルクォートで囲む必要がある2ようです.
$ printenv KANI
$ export KANI=ebi yadokari
$ printenv KANI
ebi
$ export KANI='ebi yadokari'
$ printenv KANI
ebi yadokari
$ export KANI="ebi yadokari tarabagani"
$ printenv KANI
ebi yadokari tarabagani
ダブルクォートでも問題なさそうです.
これで環境変数は設定できた,と言いたいところですが,再起動すると先ほど設定した環境変数は消えます.bash自体もプログラム(のはず)なので,プログラム中に記述された変数はプログラムが終了すれば消えます.
そのため,bashが起動される際に読み込むファイルに環境変数の設定を記述します.このあたりの細かい話はこちらの記事3を参考にしていただいて(やや古い記事ですが),結論だけいうと,~/.profile
に環境変数の設定を記述する4といいと思います.しかし多くの記事では~/.bash_profile
に書くことをおすすめしているみたいです.私の環境では~/.bash_profile
を自分で作成する必要があったので~/.profile
をおすすめしておきます.~/.profile
は作成した覚えがないから多分あると思います.
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.
# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
PATH="$HOME/.local/bin:$PATH"
fi
+ export QUIITA=quiita
+ export KANI='tarabagani ha yadokari'
これで改めて再起動をするか,bashでsource .profile
を打ち込む5と環境変数が反映されるはずです.
お疲れ様でした.
以上がubuntuにおける環境変数の設定の説明となります.
-
~/.bash_profile
の方じゃないの?と思われた方に向けてですが,~/.bash_profile
に環境変数を記述すると.bashrc
が読み込まれずコマンドラインの色が反映されなかったりします.そのため~/.bash_profile
に.bashrc
を読み込む処理を追加するのですが,私はこれにやや違和感を覚えるので~/.profile
に書き込んだ方がいいかなと思います.また,記事内でも書きましたが,私の環境では~/.bash_profile
が初期状態で存在しなかったんですよね.これも~/.profile
に書いた方が良いと思った理由の一つです. ↩