如何在Linux中设置和列出环境变量
在Linux中,环境变量是动态命名值,该值用作命令行应用程序使用的系统中存储信息的占位符。
就像任何其他变量一样,它由两个部分是名称和关联值组成。
以下是快速查看变量的格式:
KEY=value KEY="this is also a value" KEY=valueA:valueB
几件事要注意:
- 在"="符号之前或者之后,不应存在空间。
- 如果值包含白色空间,则使用引号。
- 我们可以将多个值分配给变量。每个值必须用冒号(:)字符分隔。
- 变量的名称区分大小写。因此,"键"和"键"表示两个不同的变量。按照惯例,应在上述情况下写入环境变量。
使用环境变量,我们可能会自定义系统的工作原理,包括系统上安装的应用程序的行为。
例如,我们可以使用环境变量来存储有关文本编辑器,浏览器或者甚至是可执行文件的路径等默认应用程序的信息。
这允许我们根据个人需求或者一组用户的需求来修改系统。
环境变量和shell变量之间有什么区别?
在我们开始之前,让我们首先了解环境变量与shell变量之间的差异。
要简单地说出,"环境变量"是全局可用的,并由任何生成的子进程或者shell 都继承。
另一方面,shell变量是仅适用于当前shell实例的变量。
Bash,ZSH和所有其他炮弹都有自己的一组内shell 变量。
这些通常用于跟踪临时相关数据,如当前工作目录。
现在,我们可以将shell变量作为环境变量提供。
我们需要做的就是使用"导出"命令以及变量名称。
这将在全球范围内导出其值,以便新的程序和子屏幕现在可以使用它。
这是如何完成的例子:
将shell变量导出到环境变量
我们将在后续部分中更深入地进入这一点。
如何列出和设置环境变量
有很多命令可用于列出和设置变量。
以下是快速查看我们在本教程中使用的一些最常见的命令:
export
:用于导出新分配的环境变量的值。env
:用于在自定义环境中运行另一个程序,而无需修改当前的程序。它可以与参数一起使用以打印shell中所有当前环境变量的列表。printenv
:用于打印所有(或者指定)环境变量和当前环境的定义。set
:用于分配或者定义环境或者shell变量。如果在没有参数的情况下使用,它将打印所有变量的列表,这包括环境变量,shell变量和shell函数。unset
:用于删除指定的环境或者shell变量。
使用这些命令,我们将能够在Linux系统上列出和设置环境变量。
列表环境变量
用于显示环境变量的最常用命令是"printenv"。
如果使用变量的名称作为命令的参数,则它将显示变量的值。
但是,如果在没有参数的情况下使用,它将列出系统上的所有环境变量。
这里有一些例子:
假设我们希望看到"主页"环境变量的值。
为此,我们需要运行以下命令:
$printenv HOME
这将为我们提供当前登录用户的路径:
家庭变量的值
我们还可以通过"printenv"命令用两个或者更多个参数,如下所示:
$printenv PWD LANG
我们将获得类似的输出屏幕:
PWD和LANG变量的价值
现在,如果我们在没有参数的情况下运行"printenv",那么它将显示所有环境变量的列表。
所有环境变量的列表
现在,printenv和env命令只显示环境变量。
但是,如果我们想列出系统上的所有变量,该怎么办?
这包括从环境变量开始到shell变量甚至shell函数的所有内容。
嗯,那么你可以使用没有任何参数的"set"命令:
所有变量列表
正如我们在图像中看到的,该命令将显示所有变量的大冗长列表。
如果要递送输出,则可以使用此命令(而不是:
$set | less
除此之外,如果要打印shell变量的值,还可以使用echo命令。
只需输入回声和将有关shell变量传递为其参数。
以下是一个例子,使用它与bash_version变量。
shell变量的值
为了在系统上尝试这些命令,这是一些最多命令环境变量的列表。
EDITOR
(编辑器)在终端中执行编辑器时要使用的默认文件编辑器。home
当前用户的主目录。lang
当前的本地环境设置。logname
当前用户的名称。ls_colors
定义了用于将可选的彩色输出添加到LS命令的所有颜色代码。这些颜色用于区分不同的文件类型并使输出更容易消化。- "邮件"了当前用户电子邮件存储的位置。
- "路径"执行命令时要搜索的目录列表。运行命令时,系统将以列出的顺序搜索这些目录,并使用第一个找到的可执行文件。
PWD
当前工作目录的位置。oldpwd
上一个工作目录的位置。shell
当前用户shell 的路径,例如bash或者zsh。term
当前的终端仿真。- "用户"登录用户的当前。
现在让我们谈谈如何设置环境变量。
设置环境变量
创建环境变量的常见做法是制作shell变量,然后将其导出为环境变量。
现在要创建一个新的shell变量,我们使用以下命令:
MY_VAR=theitroad
我们现在可以使用echo命令来验证变量是否设置了提供的值。
$echo $MY_VAR
同样,使用printenv查看变量是否是环境变量。
如果没有,我们将获得一个空的输出。
$printenv MY_VAR
此外,检查是否使用以下命令由子shell继承变量:
$bash -c 'echo $MY_VAR'
其中我们将获得一个空的输出,如下图所示:
设置shell变量
现在我们已经设置了my_var shell变量并验证了它,我们可以使用export命令将其设置为环境变量。
$export MY_VAR
完成后,我们可以使用上一个命令查看它是否列为环境变量,并查看它是否由子shell继承。
设置环境变量
我们还可以使用单行设置环境变量,如下所示:
$export NEW_VAR="This is a new variable"
但是,请注意以这种方式创建的环境变量仅适用于当前会话。
注销或者打开新shell后,环境变量将丢失。
持久和非持久环境变量
如前所述,当我们在当前shell中修改环境变量时,从shell注销时,它将丢失。
这被称为非持久环境变量。
要使它们持久,或者换句话说,永久性,我们需要编辑Bash配置文件。
启动新会话时,将从以下文件中读取所有环境变量。
因此,我们可以将环境变量添加到这些文件中以使其持久。
- /etc/environment:此文件包含所有系统范围的环境变量。我们可以使用以下格式添加新的变量:
$FOO=bar $MY_VAR=theitroad
/etc/profile
:此文件包括输入BASH登录shell时加载的变量集。我们可以使用导出命令在此文件中声明一个环境变量。
$export JAVA_HOME="/path/to/java/home" $export PATH=$PATH:$JAVA_HOME/bin
- 我们还可以在每个用户shell特定配置文件中设置环境文件。例如,如果我们使用的是Bash,则可以使用以下命令声明~/.bashrc内的变量:
$export PATH="$HOME/bin:$PATH"
要在当前shell会话中加载新的环境变量,我们需要使用源命令,如下所示:
$source ~/.bashrc
通过这些步骤后,即使从shell注销,我们刚添加的所有环境变量也将成为永久性,并将保持完整。