环境变量怎么设置

题图来自Unsplash,基于CC0协议
导读
环境变量就像是操作系统的对话变量,为程序运行和系统功能提供关键信息,比如程序的安装路径、临时文件存放位置等。正确设置它们对于开发、软件运行乃至系统管理都至关重要,尤其是在多用户或多程序的场景下。下面我们将分别针对不同操作系统、Shell类型以及编程语言,介绍如何设置环境变量。
一、操作系统级环境变量设置
运行在操作系统本身级别的环境变量,决定了系统软件默认的搜索路径、用户凭据、系统范围内的配置选项等。
-
Windows 如何设置环境变量 PATH Windows 使用图形界面和编辑注册表两种方式来设置环境变量,特别是全局(适用于所有用户)或每个用户。
- 图形界面:
- 在桌面上右击“此电脑”或“我的电脑”,选择“属性”。
- 点击“高级系统设置”。
- 在“系统属性”窗口的“高级”选项卡下,点击“环境变量”按钮。
- 在“系统变量”或“用户变量”区域(根据你需要修改的范围选择)找到“Path”变量。
- 点击“编辑”或“新建”来添加或修改路径。新建通常用于将单个文件夹加入PATH,而编辑允许你修改已存在的列表。完成后点击“确定”完成层级设置。
- 需要注意,修改完环境变量后,所有的新命令行窗口(CMD 或 PowerShell)都会继承新的设置。若已打开窗口,可以使用
refreshenv(PowerShell) 或gpresult /z(较新版本 Windows)等命令强制刷新。 - 注意:直接编辑注册表(如
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerEnvironment和HKEY_CURRENT_USEREnvironment下的Path键值)是一种更底层的方式,但风险也更高,建议优先使用图形界面。
- 图形界面:
-
Linux 设置环境变量的方法 export 和永久配置
Linux 系统主要通过 Shell(如 bash、sh)来管理和应用环境变量。最常见的设置方式是
export命令和编辑配置文件实现永久化设置。- 临时设置 (
export命令): 在任何一个 Shell 会话中,你可以直接使用命令行设置环境变量。 格式:export 变量名=值(斜杠前可以有空格,也可以使用引号,例如export PATH="$PATH:/新的目录"或export PATH=$PATH:/新的目录) 这种设置只在当前打开的 Shell 会话以及其子进程中有效。一旦关闭终端窗口,设置就会丢失。 - 永久配置:
为了让环境变量在每次启动 Shell 时都可用,需要将
export命令写入特定的配置文件中。- bash Shell:
- 全局设置(适用于所有用户登录后):编辑
/etc/environment文件或/etc/profile文件。 - 用户级别设置(仅当前用户):编辑用户主目录下的
~/.bash_profile或~/.bashrc文件。 - 通常
~/.bash_profile会被运行,它通常会加载~/.bashrc。 - 在配置文件末尾添加一行
export 变量名=值即可。 - 注意区别:
PATH这样的常用变量通常放在~/.bashrc中,这样每次打开一个新的终端(图形界面模拟终端除外,图形界面通常会用 X resources 或 specific 启动参数加载~/.bashrc)都会加载;而像NODE_ENV这样的特定程序变量则可放在~/.bash_profile中。
- 全局设置(适用于所有用户登录后):编辑
- 其他 Shell:如
csh或tcsh使用setenv VAR value,配置文件为~/.cshrc或/etc/csh.cshrc;fishshell则使用set -gx 变量名 值并配置于~/.config/fish/config.fish。这里主要介绍 bash。
- bash Shell:
- 验证设置:可在终端使用
echo $变量名或printenv 变量名查看变量值。echo $PATH是 bash 中常用的方式。
- 临时设置 (
-
macOS 设置环境变量的 bash 和 zsh 配置
macOS 默认从 Catalina(10.15)开始,大多数新安装的软件推荐使用 Z shell (
zsh) 作为默认 shell。官方引导程序asdf、nvm等会自动将环境变量配置文件修改集群在用户家目录下的~/.zshrc文件中。 对于习惯~/.bash_profile的用户,system-resolverlaunchctl、解决默认shell变化问题和历史遗留。- 默认 Shell (zsh):zsh 解析
~/.zshenv(每次 zsh 启动时)、(~/.zshrc)(交互式 shell 启动时)、~/.zprofile(非交互式的第一个 shell,类似bash的 .bash_profile)。通常修改~/.zshrc文件中的export命令即可达到目的。修改后需要手动通过source ~/.zshrc使更改生效,或重新打开终端。 - 旧式 Bash 用户(如果设置了 legacy shell): 他们还是在使用
~/.bash_profile、~/.bashrc、~/.bash_logout。检查 shell 类型可以通过echo $SHELL指令得知。macOS 也维护着系统级的配置文件/etc/zshrc和/etc/bashrc,但影响范围和编辑权限需要根据系统限制进行。
- 默认 Shell (zsh):zsh 解析
二、用户级别(系统变量 vs 用户变量)
系统环境变量和用户环境变量的区别主要体现在它们作用域的范围上:
- 系统环境变量:比如 Windows 的系统级 PATH、Linux/macOS 的全局配置。它们作用于系统内的所有用户和进程,通常修改需要管理员权限。这些变量帮助系统性地定义会影响所有用户的哪些目录、服务或配置。
- 用户环境变量:分别存储在每个用户的主目录下(如 Windows 的用户环境变量设置,或 Linux/macOS 中特定用户配置文件中定义的变量)。它们只在当前登录的用户及其进程下生效。这允许每个用户根据自己的需求(如特定的开发工具路径)定制自己的环境。
三、编程语言中的环境变量访问
程序通常不会直接“设置”操作系统级别的环境变量,而是根据系统当前存在的环境继承来运行。但开发和调试过程中,我们常常需要在逻辑层面访问这些变量,或者在打包应用时为特定环境提供配置。
- 当程序启动一个进程时,它会继承父进程的环境变量设置。
- 开发者工具如 Python 的虚拟环境(通过
venv或conda activate)在激活时,会修改当前 shell 的环境,从而改变PATH和其他变量,让正确版本的 Python 解释器和包被调用。 - 在代码中获取环境变量值:
- Python (最常用方式是
os.getenv函数):os.getenv("VAR_NAME", "默认值")用于获取变量VAR_NAME的值,可以通过一个参数设置找不到时的默认值。避免使用os.environ.get如果值可能没有定义,os.environ只返回已定义的变量。你可以在代码内读取环境变量,甚至在其开始时为其设置新值(但这很少做,因为这改变了实际发生的环境),以便检查依赖项或进行配置。 - Java:可以通过
System.getenv()方法获取所有环境变量,或者使用System.getenv("VAR_NAME")获取指定变量的值。也可以在代码中的MANIFEST.MF文件里使用Class-Path动态引入依赖环境,这是部署 Java 应用时常用的方式。JAVA_OPTS常用于启动脚本设置 Java 虚拟机参数。
- Python (最常用方式是
总之,环境变量是一个重要的配置工具。无论是操作系统的全局变量、多用户的用户变量,还是程序运行时的临时访问,它们都扮演着连接系统与应用程序的关键角色。学会正确理解、配置和调试环境变量能够帮助我们有效解决许多开发和系统管理中的问题。在设置或修改环境变量前,最好先备份好当前配置,尤其是在更改了系统级别路径这种最后要重启电脑的应用环境才需要重启才能生效。
© 版权声明
本文由盾科技原创,版权归 盾科技所有,未经允许禁止任何形式的转载。转载请联系candieraddenipc92@gmail.com