温锦文欧普厨电及净水器总代理 发表于 2024-10-22 00:21:37

一文讲懂Mac中的情况变量

你是否曾经由于情况变量配置不当而浪费了名贵的开辟时间?你是否好奇为什么有时候在终端输入命令会提示"command not found",而有时候又能正常运行?如果你是一名Mac用户,并且希望真正把握情况变量的奥秘,那么这篇文章将为你揭开Mac中情况变量的神秘面纱,资助你成为一名更高效的开辟者。
https://img-blog.csdnimg.cn/img_convert/30a3ea3af8127dc03a83fc874adc3ead.png


什么是情况变量?

情况变量是一种在操纵系统中存储的动态定名值,可以影响系统中运行程序的行为。简单来说,它们就像是你电脑中的一个个小便签,上面记录着各种告急信息,这些信息可以被系统或其他程序读取和使用。
在Mac(以及其他Unix-like系统)中,情况变量通常表现为"键值对"的情势:
KEY=value
比方,一个常见的情况变量是PATH,它告诉系统在那里查找可执行文件:
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
https://img-blog.csdnimg.cn/img_convert/59cd27c54c528e055bd423d95506b54c.png
为什么情况变量如此告急?

情况变量之以是告急,是由于它们在软件开辟和系统管理中扮演着关键脚色:

[*] 命令行工具的可用性: PATH情况变量决定了系统在那里查找可执行文件。正确配置PATH可以让你在任何目次下使用命令行工具。
[*] 配置应用程序行为: 许多应用程序使用情况变量来确定其行为。比方,JAVA_HOME情况变量告诉Java应用程序在那里找到Java运行时。
[*] 安全性: 某些情况变量用于存储敏感信息,如API密钥或数据库连接字符串,如许可以制止将这些信息硬编码到源代码中。
[*] 跨平台兼容性: 情况变量提供了一种在不同操纵系统间共享配置的方法。
[*] 开辟情况管理: 不同的项目大概须要不同版本的工具或库。通过情况变量,你可以轻松切换между不同的开辟情况。
https://img-blog.csdnimg.cn/img_convert/0577ab5e7218b609ef0d25dab5a836c6.png
Mac中常见的情况变量

让我们来看看Mac系统中一些常见且告急的情况变量:

[*] PATH:

[*]作用:指定系统查找可执行文件的目次列表。
[*]示例:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

[*] HOME:

[*]作用:指定当前用户的主目次。
[*]示例:/Users/yourusername

[*] USER:

[*]作用:当前登录用户的用户名。
[*]示例:yourusername

[*] SHELL:

[*]作用:指定当前用户的默认shell。
[*]示例:/bin/zsh

[*] LANG:

[*]作用:设置程序的语言和区域设置。
[*]示例:en_US.UTF-8

[*] JAVA_HOME:

[*]作用:指定Java开辟工具包(JDK)的安装位置。
[*]示例:/Library/Java/JavaVirtualMachines/jdk-15.jdk/Contents/Home

[*] PYTHONPATH:

[*]作用:指定Python查找模块的额外目次。
[*]示例:/Users/yourusername/projects/python_modules

[*] NODE_ENV:

[*]作用:指定Node.js应用程序的运行情况(如开辟、生产等)。
[*]示例:development

[*] EDITOR:

[*]作用:指定默认的文本编辑器。
[*]示例:/usr/bin/vim

[*] TERM:

[*]作用:指定终端类型。
[*]示例:xterm-256color
https://img-blog.csdnimg.cn/img_convert/9657ff51f16c9cc73ec1500a640f0fdf.png

如何查看Mac中的情况变量

在Mac中,有several 线下查看情况变量的方法:

[*] 使用env
命令:
打开终端,输入以下命令:
env
这将列出所有当前设置的情况变量。
[*] 使用printenv

命令:
printenv

这个命令的结果与env
雷同。
[*] 查看特定的情况变量:
如果你只想查看某个特定的情况变量,可以使用echo命令:
echo $PATH

这将显示PATH情况变量的值。
[*] 使用set
命令:
set
这个命令会显示所有的shell变量,包括情况变量。
[*] 在图形界面中查看:
你也可以通过以下步调在图形界面中查看系统情况变量:

[*]打开 “终端” 应用程序
[*]在菜单栏中选择 “Shell” > “新建窗口” > “系统情况变量”
这将打开一个新的终端窗口,显示所有的系统情况变量。
https://img-blog.csdnimg.cn/img_convert/6481f707022805afa966871393703bd0.png

让我们通过一个实际的例子来演示如何查看和明白情况变量:
$ echo $PATH

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/homebrew/bin$ echo $HOME/Users/yourusername$ printenv

| grep JAVAJAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-15.jdk/Contents/Home 在这个例子中,我们首先查看了PATH情况变量,它显示了一系列由冒号分隔的目次。这些目次就是系统查找可执行文件的地方。然后我们查看了HOME情况变量,它指向当前用户的主目次。最后,我们使用grep命令过滤出包含"JAVA"的情况变量,这里显示了JAVA_HOME的设置。
明白这些情况变量的含义和作用,对于排查标题和优化开辟情况至关告急。比方,如果你安装了一个新的命令行工具,但在终端中无法使用,很大概是由于它的安装目次没有被添加到PATH情况变量中。
设置情况变量的方法

在Mac中设置情况变量有两种重要方法:临时设置和永世设置。让我们详细探究这两种方法。
临时设置

临时设置的情况变量只在当前终端会话中有用。一旦关闭终端窗口或重启电脑,这些设置就会失效。

[*] 使用export命令:
export MY_VARIABLE="Hello, World!"

这会创建一个名为MY_VARIABLE的新情况变量。
[*] 在命令前设置:
MY_VARIABLE="Hello, World!" python my_script.py
这种方法只为特定命令设置情况变量。
示例:假设你正在开辟一个Python应用,须要临时设置一个API密钥:
$ export API_KEY="your-secret-api-key"$ pythonPython 3.9.5 (default, May4 2021, 03:33:11) on darwinType "help", "copyright", "credits" or "license" for more information.>>> import os>>> print(os.env
iron.get('API_KEY'))your-secret-api-key>>> exit()$ echo $API_KEYyour-secret-api-key$ # 关闭终端后,再次打开新的终端窗口$ echo $API_KEY# 此时不会显示任何内容,由于情况变量已经失效 https://img-blog.csdnimg.cn/img_convert/7b29144b247728850005bcc9eaecf106.png
永世设置

如果你希望情况变量在重启后依然有用,你须要将它们添加到shell的配置文件中。对于大多数Mac用户来说,默认的shell是Zsh。

[*] 编辑~/.zshrc文件:
nano ~/.zshrc

[*] 添加情况变量:
在文件的末尾添加:
export MY_VARIABLE="Hello, World!"


[*] 保存并退出:
按Ctrl+X,然后按Y,最后按Enter。
[*] 重新加载配置文件:
source ~/.zshrc


示例:让我们永世设置JAVA_HOME情况变量:
$ echo 'export JAVA_HOME=$(/usr/libexec/java_home)' >> ~/.zshrc$ source ~/.zshrc

$ echo $JAVA_HOME/Library/Java/JavaVirtualMachines/jdk-15.jdk/Contents/Home 这个例子中,我们使用java_home工具动态获取Java安装路径,并将其设置为JAVA_HOME情况变量。通过将这行配置添加到~/.zshrc文件中,我们确保每次打开新的终端窗口时,这个情况变量都会被正确设置。
注意:如果你使用的是Bash而不是Zsh,你须要编辑~/.bash_profile或~/.bashrc文件。
系统级情况变量

https://img-blog.csdnimg.cn/img_convert/f57692c7bded72a91a29ff3428c21157.png
除了用户级的情况变量,Mac还允许设置系统级的情况变量,这些变量对所有用户都有用。

[*] 创建或编辑/etc/paths.d/目次下的文件:
sudo nano /etc/paths.d/mypath

[*] 添加新的路径:
在文件中添加新的路径,每行一个。
[*] 保存并退出。
这种方法重要用于修改系统的PATH情况变量。对于其他类型的系统级情况变量,你可以编辑/etc/env
ironment文件:
sudo nano /etc/env
ironment 在这个文件中,你可以添加键值对情势的情况变量:
SYSTEM_WIDE_VARIABLE="This is a system-wide env
ironment variable" 记住,修改系统级配置须要管理员权限,而且大概影响系统的稳定性,请谨慎操纵。
情况变量加载次序

https://img-blog.csdnimg.cn/img_convert/5520e099fe6a81fde9afd657022b5446.png
相识Mac中情况变量的加载次序对于办理冲突和优化配置至关告急。以下是Mac(使用Zsh作为默认shell)加载情况变量的大致次序:

[*]/etc/zshenv

[*]~/.zshenv

[*]/etc/zprofile
[*]~/.zprofile
[*]/etc/zshrc
[*]~/.zshrc
[*]/etc/zlogin
[*]~/.zlogin
这个次序意味着:


[*]系统级配置(/etc/下的文件)先于用户级配置(~/下的文件)加载。
[*]zshenv
文件最先加载,适合放置告急的情况变量。
[*]zshrc文件在交互式shell中加载,适合放置别名(alias)和函数界说。
[*]zlogin文件最后加载,适合放置登录后的设置。
明白这个加载次序可以资助你更好地构造你的情况变量配置。比方,如果你想要某个情况变量在所有情况下都可用(包括非交互式shell),你应该将它放在~/.zshenv
中。
让我们通过一个实际的例子来阐明这个加载次序的告急性:
# 在 /etc/zshenv
中export GLOBAL_VAR="Hello from global"# 在 ~/.zshenv
中export GLOBAL_VAR="Hello from user"export USER_VAR="User specific"# 在 ~/.zshrc 中alias print_vars='echo $GLOBAL_VAR && echo $USER_VAR' 在这个例子中:


[*]GLOBAL_VAR在系统级和用户级在这个例子中:
[*]GLOBAL_VAR在系统级和用户级配置中都被界说了。
[*]USER_VAR只在用户级配置中界说。
[*]我们在~/.zshrc中界说了一个别名来打印这些变量。
当我们打开一个新的终端窗口时,会发生以下情况:
$ echo $GLOBAL_VAR
Hello from user
$ echo $USER_VAR
User specific
$ print_vars
Hello from user
User specific
这个结果阐明:

[*]用户级的~/.zshenv
中的设置覆盖了系统级的/etc/zshenv
中的设置。
[*]在~/.zshrc中界说的别名成功加载并可以使用。
明白这种加载次序可以资助你办理情况变量冲突,并确保你的配置按预期工作。
常见标题和办理方案

在使用Mac的情况变量时,开辟者大概会碰到一些常见标题。让我们来看看这些标题以及它们的办理方案:
https://img-blog.csdnimg.cn/img_convert/22f67568790334faeae34bac5cc9e9e1.png
1. 情况变量没有生效

标题: 你设置了一个新的情况变量,但是在新的终端窗口中无法使用。
办理方案:


[*]确保你已经正确地设置了情况变量,并且在正确的配置文件中设置(~/.zshrc或~/.zshenv
)。
[*]使用source命令重新加载配置文件:source ~/.zshrc


[*]如果标题仍然存在,实验重启终端应用程序或注销并重新登录。
2. PATH情况变量杂乱

标题: 某些命令无法找到,或者系统使用了错误版本的命令。
办理方案:


[*]查抄你的PATH情况变量:echo $PATH


[*]确保告急的目次位于PATH的前面。你可以在~/.zshrc中重新设置PATH:export PATH="/usr/local/bin:$PATH"

[*]使用which命令查抄特定命令的位置:which python

3. 情况变量包含空格

标题: 包含空格的情况变量值导致错误。
办理方案:


[*]在设置情况变量时使用引号:export MY_VAR="This is a value with spaces"

4. 子历程无法访问情况变量

标题: 在脚本或子历程中无法访问某些情况变量。
办理方案:


[*]确保变量已经被导出。使用export命令而不是简单的赋值:export MY_VAR="value"# 正确
MY_VAR="value"# 错误,不会传递给子进程

[*]对于须要在所有情况下都可用的变量,将其设置在~/.zshenv
文件中。
5. IDE或图形应用程序无法识别情况变量

标题: 在终端中设置的情况变量在IDE或其他图形应用程序中不可用。
办理方案:


[*]对于通过Dock启动的应用程序,你大概须要在~/.zshenv
中设置情况变量。
[*]或者,你可以创建一个launchd.conf文件来设置全系统的情况变量:echo 'set
env
MY_VAR value' | sudo tee -a /etc/launchd.conf 然后重启系统使更改生效。
6. 版本管理工具(如pyenv
, rbenv
)与系统路径冲突

标题: 安装了版本管理工具后,系统使用了错误版本的表明器。
办理方案:


[*]确保版本管理工具的初始化脚本正确添加到你的shell配置文件中。
[*]比方,对于pyenv
,在~/.zshrc中添加:eval "$(pyenv
init -)"
[*]确保这些初始化命令在PATH修改之后。
通过明白这些常见标题和办理方案,你可以更好地管理Mac中的情况变量,制止因配置错误而浪费名贵的开辟时间。
情况变量最佳实践

https://img-blog.csdnimg.cn/img_convert/345af66e7280135f52243173314c293f.png
为了更有用地使用情况变量并制止埋伏的标题,这里有一些最佳实践发起:

[*] 使用故意义的名称:
选择清晰、形貌性的名称for 情况变量。比方,使用DATABASE_URL而不是DB_CONN。
export DATABASE_URL="postgresql://user:password@localhost:5432/mydb"

[*] 制止敏感信息:
不要在版本控制系统中存储包含敏感信息(如密码、API密钥)的情况变量。Instead,使用.env
文件或专门的秘密管理工具。
# .env
file (不要提交到版本控制系统)API_KEY=your_secret_api_key
[*] 使用默认值:
当使用情况变量时,提供默认值以增长代码的结实性。
# In a shell script
ENVIRONMENT=${ENVIRONMENT:-development}

[*] 分组相关变量:
使用前缀来构造相关的情况变量。
export APP_NAME="MyApp"
export APP_VERSION="1.0.0"
export APP_DEBUG="true"

[*] 文档化:
记录你的情况变量,包括它们的用途、大概的值和默认值。
# DATABASE_URL: The connection string for the database
# Format: postgresql://user:password@host:port/dbname
# Default: postgresql://localhost:5432/myapp
export DATABASE_URL="postgresql://localhost:5432/myapp"

[*] 使用工具管理多情况:
对于须要在不怜悯况(开辟、测试、生产)之间切换的项目,思量使用如direnv
如许的工具。
[*] 定期检察和清理:
定期查抄你的情况变量,移除不再使用的变量。
[*] 使用类型安全的封装:
在应用程序代码中,使用类型安全的方法来访问情况变量。
import osfrom typing import Optionaldef get_database_url() -> str:    url = os.env
iron.get('DATABASE_URL')    if url is None:      raise ValueError("DATABASE_URL must be set
")    return urldef get_debug_mode() -> bool:    return os.env
iron.get('DEBUG', 'false').lower() == 'true'
[*] 版本控制情况变量模板:
虽然不应该在版本控制中包含实际的情况变量值,但是可以包含一个模板或示例文件。
# .env
.exampleDATABASE_URL=postgresql://user:password@localhost:5432/dbnameAPI_KEY=your_api_key_hereDEBUG=false
[*] 使用情况特定的配置文件:
对于不同的情况,使用不同的配置文件。
# .zshrcif [ -f ~/.zshrc_local ]; then    source ~/.zshrc

_localfi 然后,在每个情况中创建一个.zshrc_local文件,包含特定于该情况的设置。
通过依照这些最佳实践,你可以创建一个更加结实、安全和可维护的情况变量配置。这不仅可以进步你的开辟服从,还可以淘汰由于情况配置错误而导致的标题。
高级本领:使用direnv
管理项目特定的情况变量

当你在多个项目之间切换工作时,管理项目特定的情况变量大概会变得复杂。这就是direnv
发挥作用的地方。direnv
是一个扩展shell的工具,它可以根据当前目次加载和卸载情况变量。
安装direnv


在Mac上,你可以使用Homebrew来安装direnv
:
brew install direnv

安装后,你须要在你的shell配置文件(如~/.zshrc)中添加以下行:
eval "$(direnv
hook zsh)" 使用direnv



[*] 创建.env
rc文件:
在你的项目目次中创建一个.env
rc文件:
cd /path/to/your/projecttouch .env
rc
[*] 添加情况变量:
在.env
rc文件中添加你的项目特定的情况变量:
export PROJECT_NAME="MyAwesomeProject"
export DATABASE_URL="postgresql://localhost:5432/myproject"
export API_KEY="your_secret_api_key"

[*] 允许direnv
:
初次创建或修改.env
rc文件后,你须要显式地允许direnv
加载它:
direnv
allow
现在,每次你进入这个项目目次时,这些情况变量就会自动加载。当你脱离目次时,它们会自动卸载。
高级direnv
用法


[*] 继承情况变量:
你可以使用dotenv
命令来加载.env
文件:
# .env
rcdotenv
.env

[*] 根据情况加载不同的配置:
# .env
rcif [ "$ENVIRONMENT" = "production" ]; then    dotenv
.env
.productionelse    dotenv
.env
.developmentfi
[*] 添加目次到PATH:
# .env
rcPATH_add bin
[*] 设置项目特定的shell别名:
# .env
rcalias run="python manage.py runserver"
[*] 自动激活虚拟情况:
# .env
rclayout python3
通过使用direnv
,你可以大大简化项目间的切换过程,确保每个项目都有正确的情况设置,而不会污染全局情况。
总结

在这篇文章中,我们深入探究了Mac中情况变量的方方面面。我们学习了什么是情况变量,为什么它们如此告急,以及如何在Mac系统中查看、设置和管理它们。我们还讨论了常见标题及其办理方案,分享了一些最佳实践,并先容了如何使用direnv
如许的高级工具来管理项目特定的情况变量。
明白和正确使用情况变量可以:


[*]进步开辟服从
[*]加强应用程序的安全性
[*]简化配置管理
[*]使项目更易于在不怜悯况之间迁徙
记住,情况变量是强盛的工具,但也须要谨慎使用。始终依照安全最佳实践,特别是在处理敏感信息时。定期检察和更新你的情况变量配置,确保它们始终符合你的需求。
最后,我鼓励你深入探索本文中提到的工具和技能。实践是把握这些概念的最好方法。实验在你的下一个项目中应用这些知识,你会发现它们如何改变你的开辟工作流程。
通过把握Mac中的情况变量,你将成为一个更高效、更专业的开辟者。祝你编码愉快!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 一文讲懂Mac中的情况变量