公众号旧文

18年后,我才搞懂什么是 PATH 环境变量

作者:胖子阅读 —

第一次接触编程,是在大一课堂上。

那时候学的是《C语言程序设计》,装完编译器之后,老师让我们做的第一件事,不是写代码,而是配置环境变量。

图片

环境变量这个词,对当时的我来说,十分陌生。

现在我终于搞懂了,于是写下这篇,希望可以帮到大家。

一、很多人都遇到过的问题

很多人都会遇到一个非常诡异的问题:

明明软件已经装好了,但在命令行里输入命令,却提示:

‘xxx’ 不是内部或外部命令,也不是可运行的程序或批处理文件。

比如我这里有一个 PHP 程序:

C:\PHP\php.exe

显然,它已经在我的电脑里了。

但当我在命令行里直接输入:

php

却得到了这样的提示:

图片

也就是说,在系统看来这个程序并不存在。

二、但程序明明就在那,为什么系统却认为不存在?

有没有可能是没安装成功?

于是我进入 PHP 的目录看了一下:

图片

可以非常清楚地看到 php.exe 就在那里。

也就是说程序确实存在,但系统不认识它。

三、一个关键对比实验

接下来不再写 php,而是写完整路径:

C:\PHP\php.exe -n -v

可以看到成功的返回了版本号:

图片

这说明程序一点儿问题都没有,只是系统在输入 php 时,没能找到它。

四、那系统是怎么找程序的?

可能会有人以为:

输入命令后,系统就会直接去整个硬盘里找。

但实际上,并不是这样。

Windows 在执行命令的时候,只会去一份“固定的目录列表”里查找程序。

而这份列表,就叫做:PATH(环境变量)

五、PATH 到底是什么?

你可以把 PATH 理解成系统的一份“程序搜索路径清单”。

当你输入:

php

系统在按顺序去 PATH 里的每个目录找:

php.exe
  • 找到了 → 运行
  • 找不到 → 报错

六、为什么刚才会失败?

现在再回头看刚才的实验,就很好理解了:

  • php → 失败

因为 C:\\PHP 不在 PATH 里

  • C:\\PHP\\php.exe → 成功

因为完整路径告诉了系统程序在哪

所以问题根本不是系统认不认识 php

而是系统有没有被告知去哪里找 php

七、最关键的一步:加入 PATH

接下来我做了最后一步实验:

set PATH=C:\PHP;%PATH%

然后再次执行:

php -n -v

结果刚才还报错的命令,现在也成功了:

图片

注意:我没有修改 PHP 程序,只是修改了 PATH,系统就认识 php 了。

八、事情的真相

到这里,答案已经很清楚了,当你在命令行输入:

php

系统并不会去全盘搜索。

它只会在 PATH 里一条一条地找 php.exe

九、另一个可能很多人从来都没意识到的问题

很多人以为输入 php,就运行了 php

但实际上运行的从来都不是 php,而是 php.exe

只是 Windows 做了两件事:

  1. 找目录(PATH)
  2. 补全文件名(.exe)

十、最后的反直觉结论

甚至可以这么说:

如果一个程序不在 PATH 里,那么在系统看来,它就不存在。

不管它是不是已经躺在了你的硬盘里。