在 Mac 中设置环境变量

news2024/11/13 6:31:21

目录

    • 什么是环境变量,为什么它们重要?
    • 什么是环境变量?
      • 举个例子
    • 如何查看环境变量
    • 如何设置和修改环境变量
      • 1. 临时设置环境变量
      • 2. 永久设置环境变量
      • 3. 修改现有环境变量
    • 环境变量在开发中的应用
      • 在 Node.js 项目中使用环境变量
      • 在 Python 项目中使用环境变量
    • $PATH:程序员的救命工具
      • 如何检查和修改 $PATH
    • 小结

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

当你使用 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 os

database_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.coloradmin.cn/o/2135862.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Certificate has expired(npm 安装strapi)

报错信息 解决方法 1、清空缓存,有时,损坏的缓存会导致连接问题 npm cache clean --force 2、切换到淘宝镜像源的 npm 注册表 npm config set registry https://registry.npmmirror.com/ 执行这两步后就可以执行自己想要安装的东西了,我是在执…

Uniapp + Vue3 + Vite +Uview + Pinia 实现购物车功能(最新附源码保姆级)

Uniapp Vue3 Vite Uview Pinia 实现购物车功能(最新附源码保姆级) 1、效果展示2、安装 Pinia 和 Uview3、配置 Pinia4、页面展示 1、效果展示 2、安装 Pinia 和 Uview 官网 https://pinia.vuejs.org/zh/getting-started.html安装命令 cnpm install pi…

云轴科技ZStack 获鲲鹏应用创新大赛2024上海赛区决赛一等奖

9月13日,鲲鹏应用创新大赛2024上海赛区决赛成功举办。经评委专家从方案创新性、技术领先性、商业前景以及社会价值四个维度严格评审,云轴科技ZStack参赛作品《ZStack鲲鹏原生开发方案》荣获上海赛区企业赛——原生开发赛道(互联网&#xff09…

AI大模型系统实战:挑战与应用多领域,人工智能大模型的实际应用场景

AI大模型系统实战:挑战与应用多领域,人工智能大模型的实际应用场景 人工智能的新浪潮中,大模型系统已成为技术革新的重要驱动力。它们以其强大的学习能力和广泛的应用场景,正在重新定义我们与机器交互的方式。本文将深入探讨AI大模…

VS 如何显示构建的时间

Cherno 构建 Hazel 的时候会显示构建时间 VS -> Tools -> Options -> Projects and Solution -> VC Project Settings

UGit:腾讯自研的Git客户端新宠

UGit 是一款专门针对腾讯内部研发环境特点量身定制的 Git 客户端,其目标在于大幅提升开发效率以及确保团队协作的高度流畅性。UGit 能够良好地支持 macOS 10.11 及以上版本、Apple Silicon 以及 Win64 位系统。 可以下载体验一把。 https://ugit.qq.com/zh/index.…

GIS可视化软件:地理信息与遥感领域中的洞察之眼

在地理信息与遥感技术的广阔天地中,可视化软件如同一双洞察世界的明眸,将复杂的数据编织成生动、直观的画卷,为我们揭示地球的奥秘与城市的律动。本文将深入挖掘其技术核心、应用实例、未来趋势,探讨可视化软件如何为地理信息与遥…

电能质量监测装置和防孤岛装置在特斯拉工厂分布式光伏项目的应用

摘要:全球对可再生能源的关注增加,推动了分布式光伏发电系统的普及。这些系统因环保和灵活性而受到青睐,有助于解决能源和环境问题。电能质量在线监测装置和防孤岛保护装置在这些项目中至关重要。监测装置实时跟踪电压和电流,保障…

切换淘宝最新镜像源npm详细讲解

​ 大家好,我是程序员小羊! 前言: 在中国大陆,npm(Node Package Manager)的默认源由于网络限制,速度可能较慢。为了解决这个问题,淘宝提供了一个镜像源,它同步了 npm 的…

连接数据库(以MySQL为例)

文章目录 前言一、数据库是什么?二、连接步骤 1.手动导入驱动包2.连接数据库总结 前言 面对应用程序的开发,普遍需要保存用户的海量数据。保存粮的库叫粮库,保存水的库叫水库,那么保存数据的库自然叫数据库。有了数据库&#xff0…

Vue的slot插槽(默认插槽、具名插槽、作用域插槽)

目录 1. slot插槽1.1 默认插槽1.2 具名插槽1.3 作用域插槽 1. slot插槽 作用:让父组件可以向子组件指定位置插入html结构,也是一种组件间通信的方式,适用于父组件向子组件传递数据 1.1 默认插槽 Category.vue: 定义一个插槽。…

先楫HPM6750 Windows下VSCode开发环境配置

用的是EVKmini,ft2232作为调试器jtag接口调试 启动start_gui.exe 以hello_world为例,更改一下build path,可以generate并使用gcc compile 最后会得到这些 点击start_gui里面的命令行,用命令行启动vscode 新建.vscode文件夹&…

html+css网页设计 旅游网站首页1个页面

htmlcss网页设计 旅游网站首页1个页面 网页作品代码简单,可使用任意HTML辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1&#xff…

C++速通LeetCode简单第10题-翻转二叉树

递归法: class Solution { public:TreeNode* invertTree(TreeNode* root) {if (root nullptr) {return nullptr;}TreeNode* left invertTree(root->left);TreeNode* right invertTree(root->right);root->left right;root->right left;return roo…

位段、枚举、联合

位段 在一个结构体中以位(最小单位)为单位来指定其成员所占的内存长度。位段成员名后面有一个冒号,冒号后有一个数字(这个数字是小于等于这个成员所占的位)。 typedef struct S {char a : 2;//8char b : 8;//8char c …

基于学习功能聚合的英语口语学习APP

项目介绍 本系统提供文章及朗读的发布、学生跟读及自动评测等功能,促进英语口语学习。 主要包括: 文章朗读:发布文章内容及相应的朗读录音,设定打卡要求,并提供播放功能; 文章跟读:打卡,提供朗读音频播放功能,熟悉后进行跟读,自动…

[苍穹外卖]-11数据可视化接口开发

ECharts Apache ECharts是一款基于JavaScript的数据可视化图表库, 提供直观, 生动,可交互, 可定制的数据可视化图表 入门案例: 使用Echarts, 前端关注图表的配置, 不同的配置影响展示的效果, 后端关注图表所需要的数据格式 <!DOCTYPE html> <html><head>&l…

“架构建模驱动企业管理数字化转型大会”圆满落幕,上海斯歌发布重磅成果!

2024年 9 月 10 日&#xff0c;由上海博阳精讯信息科技有限公司&#xff08;后文简称“博阳精讯”&#xff09;与华为云计算技术有限公司主办&#xff0c;上海斯歌信息技术有限公司&#xff08;后文简称“上海斯歌”&#xff09;、北京凡得科技有限公司&#xff08;“后文简称凡…

【题解】CF1986G1

目录 翻译思路代码关于G2的想法 翻译 原题链接 思路 数据很大&#xff0c;显然两边同时处理&#xff0c;所以要从 p i i \frac{p_{i}}{i} ipi​​下手。   要让 p i i ∗ p j j \frac{p_{i}}{i} * \frac{p_{j}}{j} ipi​​∗jpj​​是整数&#xff0c;每个 p i i \frac{p_…

Leetcode 二叉树中根遍历

采用递归算法&#xff0c;并且用一个向量来存储节点值。 算法C代码如下&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}*…