bash环境变量_Bash中的环境变量是什么?

bash环境变量

环境变量包含有关登录会话的信息,这些信息存储在系统外壳程序中,以在执行命令时使用。 无论您使用的是Linux,Mac还是Windows,它们都存在。 这些变量中有许多是在安装或用户创建时默认设置的。

尽管环境变量适用于所有现代系统,但本文专门介绍了Linux,BSD,Mac和Cygwin上Bash shell中的环境变量。

了解环境变量

从技术上讲,环境变量与变量没有什么不同。 可以使用与变量完全相同的语法来设置,调用和清除它们。 如果您不习惯在Bash中使用变量,请先阅读我在Bash中的变量,然后再继续。

您不经常直接使用环境变量。 根据需要,各个应用程序和守护程序都引用它们。 例如,登录时将主目录设置为环境变量。例如,在Linux上,您可以看到HOME环境变量的内容,如下所示:


   
   
$ echo $HOME
HOME = / home / seth

在Mac上:


   
   
$ echo $HOME
HOME = / Users / bogus

在Windows上:

 C:\Users\bogus 

您可以使用env命令查看系统上设置的所有环境变量。 该列表很长,因此请通过更多管道输出,以使其更易于阅读:


   
   
$ env | more
TERM =xterm-256color
LESSOPEN = ||/ usr / bin / lesspipe.sh % s
USER =seth
SUDO_EDITOR =emacs
WWW_HOME =http: // mirror.lagoon.nc / pub / slackware / slackware64-current / ChangeLog.txt
VISUAL =emacs
DISPLAY =: 0
PS1 =$
XDG_DATA_DIRS = / home / seth / .local / share / flatpak / exports / share / : / var / lib / flatpak / exports / share / : / usr / local / share / : / usr / share /
PATH = / usr / local / bin: / usr / local / sbin: / usr / bin: / usr / sbin: / snap / bin: / home / seth / bin: / home / seth / .local / bin: / snap / bin
GDMSESSION =gnome
MAIL = / var / spool / mail / seth
[ ... ]

当您要覆盖默认设置,或者需要管理系统没有理由自行创建的新设置时,环境变量可能很有用。 例如,当您键入命令时,计算机知道如何查找与该命令相对应的应用程序的唯一原因是PATH环境变量告诉了它在哪里查找。 此变量列出了用于操作系统搜索命令的有效目录,无论该命令是ls还是cp ,还是Firefox或Lutris之类的图形应用程序,或者其他任何内容。

不同的系统使用了不同的环境变量。 例如,您的PATH变量对于您的终端仿真器至关重要,但是对于Java(具有自己的路径,该路径指向重要的Java库)而言,意义并不大。 但是,多个系统使用USER变量来识别谁在请求服务。 例如,如果您使用的是多用户系统,则需要检查本地邮箱,您的mail命令会根据MAILUSER变量知道要检索的邮件后台处理程序。

设置环境变量

通常,安装程序(无论是Fedora上的dnf ,Ubuntu上的apt ,Mac上的brew还是自定义安装程序)都会为新应用程序更新环境变量。 但是,有时,当您在发行版预期的工具集之外安装某些软件时,可能必须自己管理环境变量。 或者,您可以选择添加一个环境变量以适合您的首选项。 如果您决定要将某些应用程序保留在主目录中的bin文件夹中,则必须将该目录添加到PATH中,以便您的操作系统在发出命令时可以在其中查找要运行的应用程序。

临时环境变量

您可以使用创建一次性变量的方式在路径中添加位置。 它可以工作,但前提是您用来修改系统路径的外壳保持打开状态。 例如,打开一个Bash shell并修改您的系统路径:


   
   
$ export PATH = $PATH : / home / seth / bin

确认结果:


   
   
$ echo $PATH
PATH = / usr / local / bin: / usr / local / sbin: / usr / bin: / usr / sbin: / snap / bin: / home / seth / bin: / home / seth / .local / bin: / snap / bin: / home / seth / bin

关闭会话:


   
   
$ exit

打开一个新的,看看PATH变量:


   
   
$ echo $PATH
PATH = / usr / local / bin: / usr / local / sbin: / usr / bin: / usr / sbin: / snap / bin: / home / seth / bin: / home / seth / .local / bin: / snap / bin

由于未在每个新Shell中设置PATH,因此该变量已恢复为默认状态。 为此,您必须将变量配置为在启动Shell时加载。

永久环境变量

您可以在shell配置文件中设置自己的持久性环境变量,其中最常见的是〜/ .bashrc 。 如果您是管理多个用户的系统管理员,则还可以在/etc/profile.d目录中的脚本中设置环境变量。

通过配置文件设置变量的语法与在shell中设置变量的语法相同:


   
   
export PATH = $PATH : / snap / bin: / home / seth / bin

关闭当前shell,否则强制其加载更新的配置:


   
   
$ . ~ / .bashrc

最后,再看看您的系统路径:


   
   
$ echo $PATH
PATH = / usr / local / bin: / usr / local / sbin: / usr / bin: / usr / sbin: / snap / bin: / home / seth / bin: / home / seth / .local / bin: / snap / bin: / home / seth / bin

现在已正确设置为包括其他自定义目录。

发现其他环境变量

您可以随意创建和操作环境变量,某些应用程序就是这样做的。 这个事实意味着大多数应用程序都不会使用许多环境变量,并且如果您添加自己的任意变量,那么有些根本就不会使用。 所以问题是:如何找出哪些环境变量有意义?

答案在于应用程序的文档。 例如,要了解您在常规Bash环境中可以使用哪些选项,请阅读Bash文档。 尽管Bash手册页提到了许多重要的变量,但Bash的GNU信息页包含两个有用的Bourne Shell和Bash环境变量的详尽列表,以及每个变量的使用方式。

例如,在信息页面列表中:


   
   
'HISTCONTROL'
     A colon-separated list of values controlling how commands are saved
     on the history list.  If the list of values includes 'ignorespace',
     lines which begin with a space character are not saved in the
     history list.  A value of 'ignoredups' causes lines which match the
     previous history entry to not be saved.  A value of 'ignoreboth' is
     shorthand for 'ignorespace' and 'ignoredups'.
     [...]

此输出告诉您HISTCONTROL环境变量控制如何显示Bash历史记录以及可用于自定义体验的值。 在此示例中, ignoreups值告诉history命令的输出忽略重复的行。

您可以轻松地对此进行测试。 首先,连续两次发出同一命令:


   
   
$ echo "hello world"
hello world
$ echo "hello world"
hello world

查看您的历史记录,或至少查看最新条目:


   
   
$ history | tail -5
  996   man bash
  997  info bash
  998   echo "hello world"
  999   echo "hello world"
  1000 history

您可以看到重复的条目确实已经列出。

根据您在信息页面中读取的内容,在.bashrc文件中设置一个新的环境变量:


   
   
export HISTCONTROL = $HISTCONTROL :ignorespace:ignoredups

保存,然后加载新配置:


   
   
$ source ~ / .bashrc

连续两次发出两个命令:


   
   
$ echo "hello once"
hello once
$ echo "hello once"
hello once

查看历史记录中的最新条目:


   
   
$ history | tail -5
  1000 history
  1001 emacs ~ / .bashrc
  1002 source ~ / .bashrc
  1003 echo "hello once"
  1004 history

现在,由于您使用了新的环境变量,重复的条目被折叠为一个条目,就像指定的信息页面一样。

查找相关的环境变量通常是阅读要影响的应用程序文档的问题。 大多数环境变量特定于一个应用程序需要平稳运行的条件。 对于一般条目,您的外壳文档是合乎逻辑的地方。 如果编写要求新环境变量的脚本或应用程序,请确保在您自己的文档中定义这些变量。

翻译自: https://opensource.com/article/19/8/what-are-environment-variables

bash环境变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值