环境变量
# 什么是环境变量
环境变量是一种在操作系统中定义的一些用来指定操作系统运行环境的参数,它们可以影响到操作系统的行为。在 Linux 和 macOS 中,环境变量是由 shell 程序来管理的。Linux 中的环境变量包括系统级和用户级,系统级的环境变量是每个登录到系统的用户都要读取的系统变量,而用户级的环境变量则是该用户使用系统时加载的环境变量。在 macOS 中,添加环境变量之前,首先要知道使用的是什么 SHELL。macOS 内置了多种 SHELL,可通过 cat /etc/shells 查看
理解系统级和用户级 环境变零
# linux环境变量
- 系统级环境变量:这些变量对所有用户都是可见的,它们定义了系统的全局配置。这些变量通常由系统管理员设置,并且对整个系统生效。
- 用户级环境变量:这些变量只对特定用户可见,每个用户可以自定义自己的环境变量,用于定制个人的工作环境。
环境变量在登录时由shell加载并在整个会话期间保持有效。在大多数Linux发行版中,环境变量的设置通常位于以下几个文件中:
- /etc/environment:系统级环境变量的文件存储位置。这个文件包含了系统范围内所有用户共享的全局环境变量。编辑这个文件需要管理员权限。
- /etc/profile:在用户登录时执行的全局配置文件。系统级环境变量通常也在这里设置。
- ~/.bashrc 或 ~/.bash_profile 或 ~/.profile:用户级环境变量的文件存储位置。每个用户可以在自己的主目录下找到这些文件,用于定义个人环境变量。具体使用哪个文件取决于使用的shell以及配置。
如果你想设置新的环境变量,可以按照以下步骤进行:
使用任意文本编辑器打开相应的文件,例如:
sudo nano /etc/environment # 编辑系统级环境变量 nano ~/.bashrc # 编辑用户级环境变量(在bash作为登录shell时)
1
2在文件中添加你需要的环境变量,例如:
code export MY_VARIABLE="Hello, World!"
1
2保存文件并退出编辑器。
使更改生效:
对于系统级环境变量,重新启动系统或重新登录用户。
对于用户级环境变量,可以使用以下命令使其立即生效,而无需重新登录:
code source ~/.bashrc
1
2
请注意,上述是典型的Linux环境变量设置方法,但在某些发行版或特定配置中,可能会有所不同。
# mac 环境变量
# 查看mac支持什么什么shell
$ cat /etc/shells
/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
$ echo $SHELL
/bin/zsh
2
3
4
5
6
7
8
9
- sh(全称 Bourne Shell)是UNIX最初使用的 shell,而且在每种 UNIX 上都可以使用。Bourne Shell 在 shell 编程方便相当优秀,但在处理与用户的交互方便作得不如其他几种 shell。
- bash(全称 Bourne Again Shell)LinuxOS 默认的,它是 Bourne Shell 的扩展。与 Bourne Shell 完全兼容,并且在 Bourne Shell 的基础上增加了很多特性。可以提供命令补全,命令编辑和命令历史等功能。它还包含了很多 C Shell 和 Korn Shell 中的优点,有灵活和强大的编辑接口,同时又很友好的用户界面。
- csh(全称 C Shell)是一种比 Bourne Shell更适合的变种 Shell,它的语法与 C 语言很相似。
- Tcsh 是 Linux 提供的 C Shell 的一个扩展版本。
- Tcsh 包括命令行编辑,可编程单词补全,拼写校正,历史命令替换,作业控制和类似 C 语言的语法,他不仅和 Bash Shell 提示符兼容,而且还提供比 Bash Shell 更多的提示符参数。
- ksh(全称 Korn Shell)集合了 C Shell 和 Bourne Shell 的优点并且和 Bourne Shell 完全兼容。
- pdksh 是 Linux 系统提供的 ksh 的扩展。pdksh 支持人物控制,可以在命令行上挂起,后台执行,唤醒或终止程序。
- zsh Zsh 是一款功能强大终端(shell)软件,既可以作为一个交互式终端,也可以作为一个脚本解释器。它在兼容 Bash 的同时 (默认不兼容,除非设置成 emulate sh) 还有提供了很多改进,例如:更高效、更好的自动补全、更好的文件名展开(通配符展开)、更好的数组处理、可定制性高。
# 环境变量配置文件
一个mac系统中存在多个环境环境变量文件,如下是mac中一些常见的环境变量文件,以及其含义:
/etc/profile
/etc/bashrc
/etc/paths
~/.bash_profile # macOS
~/.bash_login
~/.profile
~/.bashrc # linux
2
3
4
5
6
7
其中 /etc/profile /etc/bashrc 和 /etc/paths 是系统级环境变量,对所有用户都有效。但它们的加载时机有所区别:
- /etc/profile 任何用户登陆时都会读取该文件
- /etc/bashrc bash shell执行时,不管是何种方式,读取此文件
- /etc/paths 任何用户登陆时都会读取该文件
后面几个是当前用户级的环境变量。macOS 默认用户环境变量配置文件为 ~/.bash_profile,Linux 为 ~/.bashrc。
如果不存在 ~/.bash_profile,则可以自己创建一个 ~/.bash_profile。
- 如果 ~/.bash_profile 文件存在,则后面的几个文件就会被忽略
- 如果 ~/.bash_profile 文件不存在,才会以此类推读取后面的文件
如果使用的是 SHELL 类型是 zsh,则还可能存在对应的 /etc/zshrc 和 ~/.zshrc。任何用户登录 zsh 的时候,都会读取该文件。某个用户登录的时候,会读取其对应的 ~/.zshrc。
# 本地进行环境变量的配置
我们一般开发时,需要在本地进行环境变量的配置,一般我们都是配置用户级别的环境变量。所以以下只讲解关于用户级别的mac环境变量,想要了解其他级别的环境变量,可以参考下面的网址:macOS/Linux 环境变量设置 - 知乎 (zhihu.com) (opens new window)
- 进入环境变量配置文件
添加用户环境变量,只需要修改 ~/.bash_profile(Bourne Shell)或 ~/.zshrc(zsh)或其他用户级配置文件即可。添加环境变量的语法也是:
export PATH="$PATH:<PATH 1>:<PATH 2>:<PATH 3>:...:<PATH N>"
所以我们一般先进入~/.bash_profile 文件
- 增加新的环境变量
使用export命令,例如我要增加MAVEN_HOME,可以使用下面的命令
export MAVEN_HOME=/Users/zhengjian/local/apache-maven-3.8.7
export PATH=$MAVEN_HOME/bin:$PATH
2
- 更新配置
使用source ~/.bash_profile
使当前shell更新该配置
注意:只有重新打开shell、或者再一个已经打开的shell使用该命令,相应的环境变量才会生效
# 怎么确定配置文件是否生效
echo $MAVEN_HOME
# classpath和path有什么区别
classpath和path有什么区别 (opens new window)