11
9

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 1 year has passed since last update.

ubuntuにおける環境変数の設定

Last updated at Posted at 2022-11-29

前提

この記事を書いている人は,技術記事を書くこと,および記事の内容についての知識が素人です.そのため,記事の内容は鵜呑みにせず引用した記事をたどったり,別の記事を読んだりするなど,ご自身で確認いただくようお願いします.要するに免責事項的なやつです

ところで,この記事ではubuntuにおける環境変数の設定とその関連事項について説明しますが,ubuntuに限らずLinux系なら同様にして環境変数の設定ができると思います.

前提はこのくらいで,環境変数について説明していきます.

環境変数

まず環境変数とは,OSにおける変数のようなものです.つまり,プログラムにおける変数と似たようなものです.

環境変数の確認,出力

現在設定されている環境変数を確認するにはenvprintenvとコマンドを打つことで確認できます.

bash
$ env
SHELL=/bin/bash
...(省略)

$ printenv
SHELL=/bin/bash
...(省略)

ただし,envの方では特定の変数について出力するということはできず,特定の変数について出力するならprintenvの方を使わないと出力されないみたいです.(まあgrep使えば検索できるけど)

bash
$ env SHELL
env: ‘SHELL’: No such file or directory
$ printenv SHELL
/bin/bash

それもそのはず.このサイト1によるとenvは環境変数を一時的に指定してコマンドを実行するもののようです.というわけでenvを簡単に使ってみましょう.

envの実験

(2022/12/01追記:がっつりqiitaという文字を間違えてました...ごめんなさい.左上に書いてあるのにね.面白いのでそのまま残します.クイッタ)

以下のようなshellscriptを用意します.

envtest.sh
#!/bin/bash
echo $QUIITA

ちなみに#!/bin/bashの部分は,Shebangといいます.この記事では触れないので,気になった方は調べてみてください.気にならなかった方はお祈りやら念仏やらとして,ファイルでbashを使いたいときはこう書くものだと認識してください.

このファイルには実行権限をchmodで与えておいてください.知らない人はググってくれ

何も考えず実行した場合とenvを使って出力した結果が以下の通りです.

bash
$ ./envtest.sh

$ env QUIITA='quiita' ./envtest.sh
quiita

このように環境変数を指定して実行することができました.ちなみにこの後printenv QUIITAとしても何も出力されませんでした.確認してみてください.

環境変数についてはこのくらいで,続いてメインの題材である環境変数の設定について説明していきます.

環境変数の設定

環境変数を設定するには,bashで環境変数名=値とし,これをexportするとできます.

bash
$ printenv QIITA
$ QUIITA=quiita
$ export QUIITA
$ printenv QUIITA
quiita

export 環境変数名=値としても問題なく設定できます

bash
$ 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 (diff)
# ~/.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における環境変数の設定の説明となります.

  1. 【 env 】コマンド――環境変数を指定してコマンドを実行する

  2. Linuxで環境変数およびシェル変数を読み込み設定する方法

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

  4. ~/.bash_profileの方じゃないの?と思われた方に向けてですが,~/.bash_profileに環境変数を記述すると.bashrcが読み込まれずコマンドラインの色が反映されなかったりします.そのため~/.bash_profile.bashrcを読み込む処理を追加するのですが,私はこれにやや違和感を覚えるので~/.profileに書き込んだ方がいいかなと思います.また,記事内でも書きましたが,私の環境では~/.bash_profileが初期状態で存在しなかったんですよね.これも~/.profileに書いた方が良いと思った理由の一つです.

  5. 環境変数の設定(~/.bash_profile, ~/.bashrc)

11
9
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
11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?