前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >windows系统是如何执行用户命令的?

windows系统是如何执行用户命令的?

原创
作者头像
技术人生
修改2020-01-20 15:34:53
8590
修改2020-01-20 15:34:53
举报
文章被收录于专栏:编程技术总结

一直以来,有一个疑问,在windows系统CMD下输入命令,如:javac,熟悉java的人都知道,这是将.java文件编译成.class文件,那么系统是如何找到可执行文件(.exe结尾)的呢?

查阅了相关资料发现,原来是通过环境变量找到的。比如说java虚拟机安装后,都需要在系统环境变量中配置好java虚拟机的安装路径,也就是JAVA_HOME,一般都是指向jdk的bin目录,因为jdk的可执行文件都放在bin目录下,如下图所示:

image.png
image.png

当用户在CMD下输入命令:javac时,windows会按以下步骤执行搜索:

  • 检测用户输入的命令是否是绝对路径,如果是绝对路径,那么就会在该路径中查找javac.exe文件
  • 如果不是绝对路径,那么就会在当前命令行所指向的路径中查找,如下图所示:
image.png
image.png

3.如果在当前目录问找到,那么系统就会去查找系统环境变量PATH,细心的程序员都会发现,当我们安装软件,如mysql,安装完成会,会发现在系统环境变量PATH中,会增加如下配置:

image.png
image.png

mysql在用户环境变量中增加了:C:\Program Files\MySQL\MySQL Shell 8.0\bin\路径,(用户环境变量与系统环境变量都有PATH,他们二者间不同的是,系统变量PATH是面向操作系统所有用户的,而用户变量PATH则是只对当前用户生效)。java也是如此,细想下每次装完JDK后,都需要去环境变量中增加变量JAVA_HOME,CLASSPATH,还有就是在PATH路径中增加一句:%JAVA_HOME%\bin,JAVA_HOME指向的是JDK安装根目录下的bin目录,通过以上可知,操作系统CMD全局识别命令,是通过搜索环境变量PATH(系统和用户PATH),如果在环境变量PATH中配置了可执行文件路径(或者批处理文件路径),那么系统就可以在CMD中直接输入该命令,前端工程师都会用到nodejs的NPM工具,有没有好奇过,NPM工具是如何识别的npm指令呢,就是通过在PATH中添加NPM的bin目录路径实现的,还有就是在package.json中配置scripts属性值,通过npm run 指令名,执行指令,那么系统是如何找到可执行指令的呢,在npm run xxx中并没有指定指令路径,搜索相关资料,发现原来在执行npm run命令时,会在系统变量PATH中,临时添加该工程的\node_modules\ .bin目录,当执行完结后,又会删除掉该路径。这样就解决了,全局识别指令的问题。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档