apache如何加载系统环境变量_macOS 环境变量马克

1ad6843696d37e67e1cb30e62a6f5897.png

大家好我叫乌图米,我会在这里陆续跟大家分享一些有的没的数码体验、软件技巧、系统知识,欢迎大家留言与我交流~如果你喜欢文章的内容,可以在文末点个赞 ,你的支持就是我最大的动力 !

这篇文章记录一下 macOS 环境变量的相关内容。啥是环境变量,它从哪儿加载,如何查看和设置环境变量,我们需要注意哪些环境变量?一起来看看。

0 啥是环境变量

操作系统中的环境变量「environment variables」一般是用来指定操作系统运行环境的一些参数。

函数执行时通过传递的参数调节其行为;同样,也可以设置环境变量来调节操作系统系统运行时的行为。

我们知道操作系统的代码相对固定,在获取下个版本更新前,系统的行为将按照当前的代码执行。如果大家的系统都一样,如何来区分其中和用户本身相关的不同配置呢?这时候就可以用到环境变量。

最简单的例子:需要用到你用户名的地方,操作系统使用例如NAME的变量来储存;在一些关键函数执行时,可以直接调用NAME而不是你具体的用户名;不同的用户NAME值不同,但都可以调用相同的操作系统函数。

操作系统以及任何基于操作系统的程序,都可以使用到系统级别或用户级别的环境变量。VS Code 可以调用,终端 Shell 可以调用,Homebrew 也可以调用。当然,对用户来讲,比较常见的情况是在终端配置它们。这也是环境变量最根本调用方式,使用 Shell 调用。

1 环境变量的储存与加载

笔者对于环境变量一开的印象,就是跟着教程在 cmd 里面复制粘贴一些代码,似乎就设置好了。或者是 Windows 上,打开一系列的设置路径,来到一个增添列表项的地方,开始手动添加。这些环境变量似乎来无影去无踪,仅仅是存在于系统的几行代码。

但实际上,这些变量都有相应的文件储存着,且这样的文件不止一份。区别于用户级还是系统级,它们分散在不同的文件夹下。Shell 会按照固定的优先级来加载这些文件,完成环境变量的加载。

9e5ddcb72b95d1c139507458d069c1bd.png

目前,macOS 10.15 Catalina 已经将默认的终端 Shell 配置为了zsh。这是非常明智的举动,zsh相比之前的bash有诸多更新的特性、人性化的配置。笔者就以zsh为例,说说终端的储存与加载。

zsh有这样一个列表「打钩表示对应的会话开始时会调用这个配置」。

aa9f51801bc0ea86ade4bb357a256be9.png

有很多文件,一一道来。

首先这些配置文件是根据是否系统级别来区分的。/etc/下的文件将被所有用户调用「如果需要的话」;.z*的文件仅适用于当前用户。

当前用户的配置文件储存在ZDOTDIR中。默认情况下,这是用户的根目录,例如笔者的/Users/tommy。当然,也可以将ZDOTDIR设置为另一个目录.

在所有系统级与用户级的配置文件中,zsh首先调用/etc/zshenv,然后调用用户的.zshenv。这是同级别下优先级最高的配置文件,其中的配置会影响所有情况下的zsh

接着,登录 Shell 将调用/etc/zprofile.zprofile。然后,交互式 Shell 将调用/etc/zshrc.zshrc。然后,再次登录 Shell 再次调用 /etc/zlogin.zlogin。为什么有两个用于登录 Shell 的文件?zprofile相当于bashsh的模拟登录文件,zlogin相当于ksh的模式登录文件。

最后,登录 Shell 退出时会对调用zlogout用于清理工作。注意,总是用户文件优先于系统文件。如果 Shell 由外部进程终止,则可能不会运行这些文件。

这些内容比较难以理解,可以参考更全面的分析,这是笔者翻译的国外「Moving to zsh」系列的第二篇,详细讲解了zsh的配置文件:

乌图米:翻译整理「Moving to zsh」(二)​zhuanlan.zhihu.com
18459b0aa6f47f487b46a0a60db8a268.png

简单理解:了解一下上面的表格就够了,这是在说明环境变量可能出现的储存位置与加载顺序。一般来说,我们使用终端更改环境变量时,对应的修改将储存在.zshrc中。

2 查看与配置

说了一堆看不懂的,来说说能操作的。打开我的小终端,切换我的输入法。

啥时候来做一篇笔者爱用的「双拼」输入法的介绍。
  • 使用envecho指令来查看环境变量:

1f9494cfe6ab838298ff9be45db492d4.png
# 如果你不了解这些指令,可以查看它们的 manual
man env
man echo
# 使用 env 指令查看所有的环境变量
env
# 使用 echo 指令查看某个环境变量
echo $[variable]
echo $PATH
  • 使用export指令来添加或更新环境变量:
# 同样可以查看 manual
man export
# 添加环境变量,仅仅是临时添加,对当前终端会话生效
export [KEY]=[VALUE] # 一般模式
export PATH=$PATH:<PATH 1>:<PATH 2>:<PATH 3>:...:<PATH N> # 针对 PATH 变量
# 将变量储存在配置文件中,此后长期有效
echo 'export [KEY]=[VALUE]' >> ~/.zshrc # 推荐使用 .zshrc
source ~/.zshrc # 刷新使用的环境变量
  • 移除添加的环境变量:
unset [KEY]

当然,如果知道自己使用的配置文件具体是哪一个,可以直接用编辑器打开,直接在里面添加内容。储存之后,依然是长期有效的。

449fd66f4ba2baa40afae0ffec9b902f.png

注意,查看环境变量的时候,一定要加上前面的$符号。这是终端的保留字符,一般用于获取变量的内容「字符串或数字等」,还有很多特殊的用法。例如:

$USER # 获取用户名环境变量
$(brew --cache) # 获取这条指令的输出
$0 # 脚本名称
$$ # 进程 ID
$# # 参数个数
$? # 脚本返回值
$n # 第 n 个参数
${10} # 10个以上参数加上大括号
$@ # 所有参数
...

3 用到的环境变量

比较常用的环境变量是PATH。这个变量储存了大量的路径,可能来自各个软件包。一般来说,其中储存的路径是对应软件包的可执行文件。

例如,node@12将其二进制执行文件的路径/usr/local/opt/node@12/bin/node储存在了.zshrc中。这样,在终端中使用node指令时,就可以自动从PATH中搜索,加载到这里的可执行文件。

可以使用echo $PATH查看其内容,使用export指令更新其中的内容。

d5a2b48a61c89bffa8da146a39b8fee0.png
echo $PATH # 查看 PATH 变量
export PATH=$PATH:<PATH 1>:<PATH 2>... # 添加内容到 PTAH 之后
export PATH=<PATH 1>:<PATH 2>:...:$PATH: # 添加内容到 PTAH 之前

另外还有一些 Homebrew 相关的环境变量可以设置。可以使用brew config查看 Homebrew 的配置。

96d3b7f9d1aff4d65e4e2a804f0c3cb1.png
brew config # 查看配置

安装完 Homebrew 之后,打开.zshrc文件,可以看见其中配置了一些相关内容:export PATH="/usr/local/sbin:$PATH"。这是将 Homebrew 的可执行文件引入PATH变量,从而可以在终端中使用它。

除此外,还有另外三个可以添加的变量。

a8b3943faae226d81978a6802ad2acba.png
# homebrew
export PATH="/usr/local/sbin:$PATH"
export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles # 替换二进制文件源
export HOMEBREW_EDITOR="/usr/local/bin/code" # 设置 Homebrew 默认的编辑器
export HOMEBREW_NO_AUTO_UPDATE=true # 设置执行 brew 指令时,不更新 Homebrew

4 默认的指令来源

当你查看PATH变量时,或许会发现,其中的文件路径并不是很多。我们知道,node@12将自己的可执行了文件放在了PATH中,因此可以被终端执行,那诸如pythongit之类的指令是怎么被识别的呢?

那是因为除开PATH中的路径,操作系统还会从许多默认的路径去加载程序包的可执行文件。例如/usr/bin/usr/local/bin等等。

你可以使用which指令查看某个可执行指令的来源;使用where查所有匹配的指令来源。

d52964fbacf5fc32fe2b23c07d5b1fe9.png
which [command] # 查看指令来源
where [command] # 查看所有匹配的指令

5 注意事项

有一些注意事项,罗列一下:

  • echo指令输出某个环境变量为空时,表示没有设置该变量。
  • 尽量不要更改默认的环境变量,避免引起错误。
  • 推荐使用更新的zsh;对应的配置文件使用.zshrc
  • 如果使用的bash,对应的配置文件是.bash_profile
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值