在 Mac 中设置环境变量

embedded/2024/12/22 9:19:21/

目录

什么是环境变量,为什么它们重要?

当你使用 Mac 或任何其他基于 Unix 的操作系统时,环境变量是操作系统与应用程序交互的桥梁。这些变量提供了关键的配置信息,如用户的主目录路径、系统的时间格式、命令行工具的路径等等。在实际开发过程中,了解如何正确设置和管理环境变量,可以极大地提高效率。例如,在启动项目时,你不需要每次手动设置数据库路径、API 密钥等信息,因为这些都可以通过环境变量自动传递。
image.png

这篇文章将详细解析如何在 Mac 中查看、设置、修改环境变量,并通过实例展示如何在实际开发中利用环境变量来提高工作效率。

什么是环境变量

环境变量是键值对的形式存储在操作系统中的信息,用来为运行中的程序提供操作环境的信息。例如,在 Mac 上,你的命令行会从 $PATH 环境变量中读取可执行程序的路径,这样你就不需要在每次运行命令时提供完整路径。

最常见的环境变量包括:

  • $HOME:用户的主目录路径。
  • $PATH:系统查找可执行文件的路径列表。
  • $USER:当前登录的用户名。
  • $SHELL:当前使用的命令行 Shell。

举个例子

当你在命令行输入 python3 时,系统会在 $PATH 中查找 python3 可执行文件的路径,如果找不到,系统将返回 command not found。因此,正确配置 $PATH 是非常关键的。
image.png

如何查看环境变量

在 Mac 中,你可以通过命令行工具轻松查看当前的环境变量。最常见的查看环境变量的方式是使用 printenvenv 命令。

printenv

这将列出所有当前的环境变量。如果你只想查看某个特定的环境变量,比如 $HOME,你可以这样做:

echo $HOME

这将输出类似 /Users/yourname 的路径。
image.png

如何设置和修改环境变量

在 Mac 上设置环境变量有两种方式:临时设置和永久设置。

1. 临时设置环境变量

如果你只希望在当前终端会话中设置环境变量,可以直接使用 export 命令:

export MY_VARIABLE="Hello World"

然后你可以通过 echo 来验证它是否被设置成功:

echo $MY_VARIABLE

这将在终端中输出 Hello World。但是,当你关闭当前的终端窗口时,所有的临时环境变量都会消失。
image.png

2. 永久设置环境变量

要永久保存环境变量,你需要将它们添加到你的 Shell 配置文件中。常见的 Shell 配置文件包括 ~/.bash_profile~/.bashrc~/.zshrc 等,具体取决于你使用的 Shell 类型。

如果你使用的是 zsh(macOS Catalina 及更新版本的默认 Shell),你可以编辑 ~/.zshrc 文件:

nano ~/.zshrc

然后在文件末尾添加你想要设置的环境变量

export MY_VARIABLE="Hello World"

保存并退出编辑器后,你需要重新加载该文件才能使新设置的变量生效:

source ~/.zshrc

现在,MY_VARIABLE 将在每次新终端会话中自动可用。
image.png

3. 修改现有环境变量

假设你已经有一个 $PATH 变量,并且想要在它的基础上添加新的路径。你可以通过如下方式做到:

export PATH="/new/path:$PATH"

这样做会将 /new/path 添加到现有的 $PATH 开头。也可以通过将它放在末尾来添加路径:

export PATH="$PATH:/new/path"

确保不要覆盖现有的 $PATH,否则系统将无法找到已经存在的可执行文件。
image.png

环境变量在开发中的应用

环境变量广泛应用于软件开发过程中。一个典型的应用场景是存储敏感信息,如 API 密钥、数据库配置等。通过将这些信息存储在环境变量中,开发人员可以避免将敏感数据硬编码到代码中。

在 Node.js 项目中使用环境变量

在 Node.js 项目中,可以通过 process.env 访问环境变量。例如,你可以在项目的 .env 文件中定义你的 API 密钥:

API_KEY=1234567890

然后在你的 Node.js 代码中这样使用它:

const apiKey = process.env.API_KEY;
console.log(`Your API key is: ${apiKey}`);

使用 dotenv 库可以让你更方便地加载 .env 文件中的内容到环境变量中:

npm install dotenv

在你的代码中引入并配置 dotenv

require('dotenv').config();const apiKey = process.env.API_KEY;
console.log(`Your API key is: ${apiKey}`);

image.png

在 Python 项目中使用环境变量

在 Python 中,可以使用 os 模块来访问环境变量。例如,你可以在 .bash_profile.zshrc 文件中定义一个数据库 URL:

export DATABASE_URL="postgres://user:password@localhost/dbname"

然后在 Python 中通过 os.getenv() 访问它:

import osdatabase_url = os.getenv('DATABASE_URL')
print(f"Database URL: {database_url}")

通过这种方式,你可以安全地管理敏感数据,且不会将这些信息暴露在代码中。
image.png

$PATH:程序员的救命工具

在所有环境变量中,最重要的可能就是 $PATH$PATH 环境变量定义了系统应该在哪些目录中查找可执行文件。因此,如果某个程序的路径没有包含在 $PATH 中,你就必须每次使用完整的路径来运行它。为了避免这种情况,我们通常会将常用的程序目录添加到 $PATH 中。

如何检查和修改 $PATH

你可以通过以下命令检查当前的 $PATH 值:

echo $PATH

如果你安装了某个程序,比如 Python,但发现无法直接运行,你可以将它的安装路径添加到 $PATH 中。例如,如果 python3 安装在 /usr/local/bin/python3,你可以这样做:

export PATH="/usr/local/bin:$PATH"

这样一来,你就可以直接在终端中输入 python3 来运行它,而不需要每次都输入完整的路径。
image.png

小结

环境变量是任何程序员在 Mac 上都必须掌握的基础知识。它们不仅影响你的开发体验,还可以提高工作效率,特别是在管理 API 密钥、数据库配置等敏感信息时。通过正确设置和管理环境变量,你可以使开发过程更加顺畅,避免一些不必要的麻烦。

记住,环境变量有临时和永久两种设置方式。临时的设置只对当前会话有效,而永久的设置则会对所有会话生效。确保正确修改 $PATH,避免意外地覆盖重要的系统路径。

在你下一次遇到一个 command not found 错误时,别忘了先检查一下你的 $PATH 设置。


http://www.ppmy.cn/embedded/114585.html

相关文章

前端页面访问url完整过程解析

前端页面访问URL的完整过程是一个复杂但有序的流程,它涉及到多个层面的技术和协议。以下是该过程的详细讲解: 1. 用户输入URL并按下回车 当用户在浏览器的地址栏中输入一个URL并按下回车时,浏览器开始处理这个请求。 2. 浏览器查找缓存 浏…

基于MTL的多任务视频推荐系统

多任务学习,也就是MTL(Multi-task Learning),现在已经被用在很多领域了,比如处理自然语言、搞计算机视觉,还有语音识别这些领域。MTL在大规模的推荐系统里也玩得挺溜,尤其是那些做视频推荐的大家伙。 MTL的玩法就是&a…

vue3 自定义el-tree树形结构样式

这里样式设置主要用到了 windcss 实现效果 模拟数据 这里也可以用模拟的数据,下面用的是后端请求的真实数据 [{"id": 5,"rule_id": 0,"status": 1,"create_time": "2019-08-11 13:36:09","update_time": "…

AI免费UI页面生成

https://v0.dev/chat v0 - UI设计 cursor - 编写代码 参考:https://www.youtube.com/watch?vIyIVvAu1KZ4 界面和claude类似,右侧展示效果和代码 https://pagen.so/

科技与艺术完美融合的LED异形创意圆形(饼/盘)显示屏横空出世

随着LED技术的飞速发展,这款集科技与艺术于一体的异形创意圆形(饼/盘)显示屏,不仅以其独特的形态打破了传统显示屏的界限,更在视觉呈现上开启了前所未有的新篇章。它不再仅仅是信息传递的载体,而是成为了空…

ceph简介

ceph存储简要概述: 通过将文件分解成固定大小对象,然后存放于pool中,每个pool中 可包含多个pg,每个pg中又可包含多个osd 通过crush算法 最终数据落盘到osd中去。 一、ceph 删除osd 步骤1 修改osd数据操作权重值 ceph osd crush r…

关于实时数仓的几点技术分享

一、实时数仓建设背景 业务需求的变化:随着互联网和移动互联网的快速发展,企业的业务需求变得越来越复杂和多样化,对数据处理的速度和质量要求也越来越高。传统的T1数据处理模式已经无法满足企业的需求,实时数据处理成为了一种必…