ubuntuにおける環境変数の設定
前提
この記事を書いている人は,技術記事を書くこと,および記事の内容についての知識が素人です.そのため,記事の内容は鵜呑みにせず引用した記事をたどったり,別の記事を読んだりするなど,ご自身で確認いただくようお願いします.要するに免責事項的なやつです
ところで,この記事では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
根据这个网站的说明,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
你可以将环境变量名设置为任何值,这不会有任何问题。
$ printenv QUIITA
quiita
$ export QUIITA=quiiiiiita
$ printenv QUIITA
quiiiiiita
如果重新导出具有相同环境变量名称的变量,则可能覆盖原有值。
然而,如果值中包含空白字符,则似乎需要用单引号括起来。
$ 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中设置环境变量。然而,许多文章都建议在~/.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命令,这样环境变量才会生效。
辛苦了。上述是关于在Ubuntu中设置环境变量的说明。
在Linux上加载和设置环境变量和shell变量的方法
虽然有点晚了,但我还是想在Linux上设置环境变量
对于那些认为是~/.bash_profile的人来说,如果将环境变量写入~/.bash_profile,.bashrc将不会被加载,命令行的颜色也不会被反映。因此,我建议将.bashrc加载到~/.bash_profile中,但我对此感到有些不自然,所以我认为最好是将它们写入~/.profile中。此外,正如我在文章中所写的,我的环境中一开始没有~/.bash_profile这个文件。这也是我认为将其写入~/.profile的一个原因。
设置环境变量(~/.bash_profile,~/.bashrc)