如何在linux上的bash中设置环境变量

Linux上有多种类型的环境变量。了解如何查看它们,为本地和远程登录创建它们,并使它们在重新启动后仍然有效。...

Linux上有多种类型的环境变量。了解如何查看它们,为本地和远程登录创建它们,并使它们在重新启动后仍然有效。

环境变量的工作原理

启动终端窗口及其内部的shell时,会引用一组变量,以确保shell配置正确。这些变量还确保终端窗口和shell可能需要引用的任何信息都可用。总的来说,这些变量保存的设置定义了在终端窗口中找到的环境,一直到命令提示符的外观。所以,自然地,它们被称为环境变量。

一些环境变量是系统范围的,或者是全局的。其他人是全会,只能由你看到。其他人无法引用您的会话环境变量。在shell中定义了第三组环境变量。您的区域设置、时区和键盘设置、shell尝试查找命令时搜索的目录集以及默认编辑器都存储在shell环境变量中。

我们将向您展示如何查看系统中存在的环境变量,并描述如何创建自己的环境变量。我们还将向您展示如何使它们对子进程可用,以及如何在重新启动时保持持久性。

环境与遗传

当shell启动时,它会经历一个初始化阶段。此时,它读取定义shell环境的环境变量。

当程序或命令从称为子进程的shell启动时,它会继承父进程的环境,但请注意!我们将看到,您可以创建不添加到环境中的变量,这样子进程就不会继承这些变量。

如果子进程是一个shell,则该shell将从它自己的、新的变量集进行初始化。因此,如果在当前shell中更改命令提示符,然后启动子shell,子shell将不会继承父shell修改后的命令提示符。

全球环境变量

按照惯例,环境变量的名称是大写的。以下是一些全局环境变量及其包含的值所代表的内容:

  • SHELL:打开终端窗口时将启动的SHELL的名称。在大多数Linux发行版上,这将是bash,除非您将其从默认值更改为bash。
  • 术语:终端窗口实际上是硬件终端的模拟。它包含将被模拟的硬件终端的类型。
  • 用户:当前使用系统的用户的用户名。
  • PWD:当前工作目录的路径。
  • OLDPWD:移动到当前工作目录之前所处的目录。
  • LS\u颜色:LS使用的颜色代码列表突出显示不同的文件类型。
  • 邮件:如果您的Linux计算机上已经设置了邮件系统(默认情况下不是),那么它将保留当前用户邮箱的路径。
  • PATH:shell将搜索以查找命令可执行文件的目录列表。
  • 语言、本地化和字符编码设置。
  • HOME:当前用户的主目录。
  • _:underline(\ ux)环境变量保存最后键入的命令。

相关:如何在Linux上使用pushd和popd

我们可以看到其中一些设置使用的是echo,它将值写入终端窗口。要查看环境变量所包含的值,需要在其名称的开头添加美元符号($)。

很好的一点是,您可以使用tab completion为您填写环境变量名称。键入几个字母的名字和点击标签。变量的名称由shell完成。如果没有发生这种情况,则需要再键入几个字母,以便将环境变量与名称以相同字母开头的其他命令区分开来:

echo $SHELL echo $LANG echo $HOME echo $PWD

如何在linux上的bash中设置环境变量

要创建自己的全局环境变量,请将它们添加到/etc/environment文件中。您需要使用sudo来编辑此文件:

sudo gedit /etc/environment

如何在linux上的bash中设置环境变量

要添加环境变量,请键入其名称、等号(=)和希望环境变量保持的值。在等号(=)前后不要空格。环境变量的名称可以包含字母、下划线(\)或数字。但是,名称的第一个字符不能是数字。

如果值中有空格,请确保将整个值用引号(“)括起来。

如何在linux上的bash中设置环境变量

保存文件,然后注销并重新登录。使用echo测试是否存在新变量并保存您设置的值:

echo $WEBSITE

如何在linux上的bash中设置环境变量

因为它是一个全局环境变量,每个人都可以使用,所以用户mary可以在下次登录时引用该环境变量:

echo $WEBSITE

如何在linux上的bash中设置环境变量

要同时查看所有环境变量,请键入printenv。有很多输出,所以通过管道将其排序,然后将其转换为更少的输出是有意义的:

printenv | sort | less

如何在linux上的bash中设置环境变量

环境变量的排序列表以较少的格式显示。

如何在linux上的bash中设置环境变量

我们可以通过grep管道输出与特定主题相关的环境变量。

printenv | grep GNOME

如何在linux上的bash中设置环境变量

相关:如何使用gedit在Linux上以图形方式编辑文本文件

shell环境变量

这些是bash中用于指示或记录其行为和功能的一些shell环境变量。使用终端时会更新某些值。例如,COLUMNS环境变量将更新以反映您可能对终端窗口宽度所做的更改:

  • BASHOPTS:启动bash时使用的命令行选项。
  • BASH\u版本:BASH版本号是一个由单词和数字组成的字符串。
  • BASH\u VERSINFO:数字形式的BASH版本。
  • 列:终端窗口的当前宽度。
  • DIRSTACK:通过pushd命令添加到目录堆栈的目录。
  • HISTFILESIZE:历史文件中允许的最大行数。
  • HISTSIZE:内存中允许的历史行数。
  • 主机名:计算机的主机名。
  • IFS:用于在命令行上分隔输入的内部字段分隔符。默认情况下,这是一个空格。
  • PS1:PS1环境变量包含主、默认和命令提示符的定义。命令提示符的定义中可以包含一组称为转义序列的标记。它们表示主机和用户名、当前工作目录和时间。
  • PS2:当命令跨越多行并且需要更多输入时,将显示辅助命令提示符。PS2环境变量保存此辅助提示的定义,默认情况下,该提示是大于号(>)。
  • SHELLOPTS:可以使用set选项设置Shell选项。
  • UID:当前用户的用户标识符。

相关:如何在Linux上使用pushd和popd

让我们检查几个shell变量:

echo $BASH_VERSION echo $HOSTNAME echo $COLUMNS echo $HISTFILESIZE echo $UID

如何在linux上的bash中设置环境变量

为完整起见,以下是可以在命令提示定义中使用的标记:

  • \t:当前时间,格式为HH:MM:SS。
  • \d:当前日期,表示为工作日、月、日。
  • \一个新行字符。
  • \学生:你的贝壳的名字。
  • \W:您当前工作目录的名称。
  • \w:当前工作目录的路径。
  • \u:登录者的用户名。
  • \h:计算机的主机名。
  • \#:shell中的每个命令都有编号。这允许您在命令提示符中查看命令的编号。这与命令在历史记录列表中的编号不同。
  • \$:对于普通用户,将提示的最后一个字符设置为美元符号($),对于根用户,将提示的最后一个字符设置为哈希符号(#)。这是通过检查用户的UID来实现的。如果为零,则用户是root。

您将在.bashrc文件中找到PS1环境变量的定义。

创建会话环境变量

要创建供自己使用的环境变量,请将它们添加到.bashrc文件的底部。如果您想让环境变量可用于远程会话,例如SSH连接,那么还需要将它们添加到.bash\u概要文件中。

两个文件的环境变量定义格式相同。要向.bash\u配置文件添加定义,请在主目录中键入以下内容:

gedit .bashrc

如何在linux上的bash中设置环境变量

我们添加了一个名为INHERITED\u VAR的环境变量。请注意行开头的单词“export”。

如何在linux上的bash中设置环境变量

完成编辑后保存并关闭文件。您可以注销并重新登录,也可以使用点命令(.)使shell重新读取.bash\u概要文件,如下所示:

. .bashrc

如何在linux上的bash中设置环境变量

现在,让我们在命令行上创建一个环境变量:

LOCAL_VAR="This session only"

如何在linux上的bash中设置环境变量

如果我们使用echo,我们可以看到两个环境变量都可以访问:

echo $LOCAL_VAR echo $INHERITED_VAR

如何在linux上的bash中设置环境变量

您将注意到,继承的\u VAR环境变量的定义在行的开头有“export”一词。这意味着环境变量将由当前shell的子进程继承。如果我们使用bash命令启动另一个变量,我们可以从子shell内部再次检查这两个变量:

bash echo $LOCAL_VAR echo $INHERITED_VAR

如何在linux上的bash中设置环境变量

如您所见,继承的\u VAR可以在子shell中访问,但是本地\u VAR不能访问。我们只得到一个空行。

虽然“export”将环境变量部分添加到子进程继承的环境中,但继承的\u VAR不是全局环境变量。例如,用户mary不能引用它:

echo $INHERITED_VAR

如何在linux上的bash中设置环境变量

要关闭child bash会话,请使用exit:

exit

继承的环境也会影响脚本。下面是一个简单的脚本,它将三个环境变量的值写入终端窗口:

#!/bin/bash echo "WEBSITE" $WEBSITE echo "LOCAL_VAR" $LOCAL_VAR echo "INHERITED_VAR" $INHERITED_VAR

这被保存到一个名为环境测试.sh,然后使用以下命令使其可执行:

chmod +x envtest.sh

当我们运行脚本时,它可以访问三个环境变量中的两个:

./envtest.sh

如何在linux上的bash中设置环境变量

脚本可以看到网站全局环境变量和继承的导出的环境变量。即使脚本在创建变量的同一shell中运行,它也无法访问本地变量。

如果需要,我们可以从命令行导出环境变量。我们将对本地的\u VAR执行此操作,然后再次运行脚本:

export LOCAL_VAR ./envtest.sh

如何在linux上的bash中设置环境变量

环境变量已添加到当前shell的环境中,因此它出现在脚本继承的环境中。脚本也可以引用该环境变量。

远程连接

远程登录会话可以访问全局环境变量,但是如果您希望本地定义的环境变量可以远程使用,则必须将它们添加到.bash\u概要文件中。可以在.bashrc和.bash\u概要文件中使用不同的值设置相同的环境变量。这可以通过一个脚本来实现,比如说,为本地或远程使用系统的用户修改它的行为。

(冒着混淆问题的风险,还有一个.profile文件。它也可以保存环境变量定义。但是,如果存在.bash\u概要文件,则不会读取.profile文件。因此,最安全的方法和bash兼容的方法是使用.bash\u概要文件。)

要编辑.bash\u配置文件,我们将再次使用gedit:

gedit .bash_profile

如何在linux上的bash中设置环境变量

我们将添加相同的环境变量和之前使用的值。

如何在linux上的bash中设置环境变量

保存更改并关闭gedit。

在另一台计算机上,我们将与测试计算机建立SSH连接。

ssh [email protected]

如何在linux上的bash中设置环境变量

连接后,我们将再次运行脚本:

./envtest.sh

如何在linux上的bash中设置环境变量

作为远程登录初始化的一部分,.bash\u概要文件已经被读取,我们和脚本都可以访问继承的\u VAR环境变量。

取消设置环境变量

要取消设置环境变量,请使用unset命令。如果我们取消设置全局环境变量WEBSITE和导出的环境变量INHERITED\u VAR,它们将不再在命令行或子进程中可用:

unset WEBSITE unset INHERITED_VAR ./envtest.sh echo $WEBSITE

如何在linux上的bash中设置环境变量

需要注意的是,这只会在本次会话中更改全局环境变量的可用性。另一个同时登录的人仍然可以访问该全局环境变量的实例。他的实例在登录过程中被初始化并从/etc/environment文件中读取,并且独立于其他任何人的变量副本。

例如,用户mary仍然可以访问WEBSITE环境变量并读取其值,即使用户dave已在其会话中取消设置该变量:

echo $WEBSITE

如何在linux上的bash中设置环境变量

环境控制

环境变量可以用来让脚本和应用程序知道它们应该如何工作。它们可用于存储设置或少量数据。例如,脚本可以使用其他脚本可以引用的值填充环境,而无需将它们写入文件。

  • 发表于 2021-04-02 06:44
  • 阅读 ( 221 )
  • 分类:互联网

你可能感兴趣的文章

Windows10中LinuxBashShell快速指南

...更多的特性。了解更多关于Bash-on-Windows的信息,从您应该如何以及为什么安装它,到您可能不知道的隐藏特性。 ...

  • 发布于 2021-03-17 01:06
  • 阅读 ( 194 )

如何使用applescript将bash脚本转换为可单击的应用程序

...为输入运行它。这些特殊的应用程序被称为水滴。下面是如何创建一个: ...

  • 发布于 2021-03-21 09:39
  • 阅读 ( 249 )

如何在windows10上获得linux bash shell

... 如何在windows10上安装linux bash shell ...

  • 发布于 2021-03-21 11:48
  • 阅读 ( 286 )

关于linux中bash for loops的所有知识

... 第一行告诉运行这个程序的人如何运行它(即使用bash解释器)。第二个命令与您在命令行中输入的任何其他命令一样。将该文件另存为hello_世界.sh,然后: ...

  • 发布于 2021-03-29 06:22
  • 阅读 ( 312 )

如何使用受限shell来限制linux用户可以做什么

...改其目录,您可以控制他们可以访问哪些命令。下面介绍如何在Linux上设置受限shell。 受限炮弹 受限shell不是另一个shell。这是标准外壳的另一种模式。Bash、Korn、Fish和其他shell都可以在受限shell模式下启动。在本文中,我们将...

  • 发布于 2021-03-31 10:57
  • 阅读 ( 387 )

如何使用chsh在linux上更改默认shell

Bash不是唯一的Linux shell。很容易尝试其他的shell,比如非常流行的Zsh。找到一个您喜欢的shell后,使用chsh命令将其设置为默认shell。我们会教你怎么做。 为什么贝壳很重要 shell位于您和操作系统之间。它在终端窗口内提供环境...

  • 发布于 2021-04-02 06:04
  • 阅读 ( 337 )

如何在linux上使用cd命令

...小又简单。 在使用Linux计算机的第一个小时内,您将学习如何使用Bash和其他shell附带的cd命令。也许您以前有在其他操作系统上使用它的经验,不需要解释。它会改变当前的工作目录,对吗?还有什么要知道的? 好吧,比你想象...

  • 发布于 2021-04-02 08:58
  • 阅读 ( 172 )

linux下如何使用which命令

...在shell中的,因此Bash不必费劲地查找这些命令。 但是Bash如何定位其他命令、程序和外部独立二进制文件呢?Bash使用路径,实际上是一组路径,每个路径指向一个目录。然后,它在每个目录中搜索与您试图运行的命令或程序匹配...

  • 发布于 2021-04-02 20:07
  • 阅读 ( 170 )

如何在bash中使用变量

...给它: drink_of-the_Year="$my_boost $this_year" echo drink_of_the-Year 如何在脚本中使用变量 如果没有变量,脚本将完全无法运行。变量提供了灵活性,使脚本成为通用的解决方案,而不是特定的解决方案。为了说明这一区别,这里有一个...

  • 发布于 2021-04-03 02:34
  • 阅读 ( 196 )

如何在linux上使用chroot命令

...法是安装足够的操作系统,以完成所需的任务。通过查看如何使用chroot环境来回答“what is required”问题。 一些常见用途是: 软件开发和产品验证。开发人员编写软件,产品验证团队(PV)对其进行测试。有时PV发现的问题无法...

  • 发布于 2021-04-03 03:19
  • 阅读 ( 197 )
F76332477
F76332477

0 篇文章

相关推荐