提到配环境,很多时候就会要去编辑一个叫.bash_profile的文件。有时候又有的帖子写的是编辑.bashrc的文件。这两个文件是干什么的,有什么区别?
首先,这两个文件都在~目录下,这个~也就是你的用户的家目录。以我的电脑举例:
有的可能会问,我在这看不到有这些文件,那是因为以.开头的文件都是系统隐藏文件,要在视图中查看的话,可以按
command + shift + .
这个组合键,显示或隐藏 隐藏文件。
有很多没有配过环境的,目录下可能根本就没有这个文件。那就要手动创建这个文件了。
新建文件可以先打开家目录
cd ~
用vim 创建文件并编辑(vim如果文件存在就直接编辑,不存在则自动创建)
vim .bash_profile
不会用vim或者nano的,可以用touch命令来先创建文件(即使文件已经存在也不要紧,touch命令不会覆盖掉已存在文件,只是更新了文件的修改时间)
touch .bash_profile
然后用文本编辑器打开这个文件去编辑
open .bash_profile
在这里插一句,对于bashrc之类的区别请移步:
https://blog.csdn.net/m0_37739193/article/details/72638074
https://www.cnblogs.com/yangqionggo/p/3280891.html
我只拿.bash_profile举例。所以也可以看出
~目录在当前你的用户下,所以你在~目录下的所有配置,也只会对你这个当前的用户生效,全局配置在/etc/目录下,刚才的文章也有提到。拿Windows类比的话大概就是用户变量和系统变量的差别。别的我就不多描述了,毕竟他讲的挺清楚。
另外.bash开头的配置文件只对bash终端有效,如果用其他的终端(比如我用的zsh)就在相应的终端配置文件下修改(就是.zshrc)
接下来讲一下经常编辑的一个变量,PATH。这个是干什么用的呢?可以先输出来看一下
echo $PATH
如果没配置过,显示的就会是一个空行,这不是问题。可以看到我的电脑已经配置了很多路径在这里。这有什么用呢?简单来说就是能让你在当前终端执行命令的时候,这个命令可以被终端识别。记住,所有的命令本质其实都是可执行文件!拿maven举例而言,我在终端直接输入
mvn -version
为什么直接输入mvn就能识别并执行这个命令呢?这个就得先讲讲PATH的作用了。对于输入的命令,比如xxx,终端会首先在当前目录下去找这个文件,如果找不到,那就去PATH里的路径去找了,从我刚才的截图来看,就会先去/usr/local/mysql/bin目录下去找有没有xxx命令(:是分隔符,用来分隔路径),如果没有,就去下一个路径/Users/momo/Documents/apache-maven-3.5.2/bin找。mvn命令刚好就在这个路径下,于是就执行了mvn命令。如果xxx不在这个路径下,就继续往后找,直到找完所有的路径,都没有xxx命令,则会告诉你没有找到这个命令
(中途换了台电脑继续更)
那我们就可以来解释一下例如java环境的配置了。
这些乱七八糟的是在什么东西?那就来逐一解释。在网上下载了一个jdk以后,比如我这个jdk就叫jdk-9.0.4.jdk
(可以去目录看一下,打开finder按组合键
command + shift + G
输入路径:
/Library/Java/JavaVirtualMachines/
)
回到刚才的配置上。第一行的JAVA_HOME就是一个变量,这个变量为你的jdk文件夹下的contents/home这个目录
第二行classpath,之前说了多个值用:来分割,那就看第一个.表示当前目录,第二个$JAVA_HOME/lib/dt.jar,其中$表示引用变量,所以$JAVA_HOME就是刚才的java_home的值/Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home,所以这个路径就是指/Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home/lib/dt.jar,可以看一下
可以发现根本就没有这个文件,说明这个路径其实配置了也是无效的,说明我抄的这个配置其实是有问题的,不过先不管了,继续看后面$JAVA_HOME/lib/tools.jar,也就是/Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home/lib/tools.jar,看一下
也就是这两个路径的配置并没有生效,所以这就说明了,百度能找到很多配置的教程,但都各种各样,具体正确与否一定要来自己的文件下看一下。
第三、五行是maven的配置,先不看,第四行#号开头,是注释,也不管。第六行export JAVA_HOME
export表示导出一个变量让其在终端中生效,就是将shell变量输出为环境变量。所有配置的环境,一定要最终被export执行才可以生效。再往后看PATH=$JAVA_HOME/bin:$M2:$PATH:
export PATH
export PATH表示让PATH变量变成环境变量,那重点就是PATH的值是什么了
之前说了$表示引用变量,$JAVA_HOME/bin就是/Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home/bin目录了,来看一下
继续,$M2是maven的路径先忽略,后面怎么又有一个$PATH?这是因为,如果有的人已经之前配置过path了,这个path就已经有了值,比如PATH=abc/bin,那如果不加上这一句,现在的path就只有java的路径和maven的路径了,之前的abc/bin路径就没有了。加上这个$PATH,那因为PATH=abc/bin,所以就能把之前abc/bin这个路径值保留下来,并且重新赋值给了新的PATH上,从而保证path值不丢失。
别急。编辑完.bash_profile这个文件之后,还需要让这个文件被系统重新读取一下你新编辑的配置才能让系统生效。那怎么让它生效呢?这就需要用到source命令了,执行
source .bash_profile
这样,一次环境配置就算完成了。
所以,如果我们没有配置java的环境,那我们执行java这个命令的时候每次都需要在终端输入
现在配置完了path之后,就能直接在终端输入java就可以了
可以看一下是不是这样,输入which java检测一下
可以看到,直接执行java这个命令其实就是执行了刚才配置的这个路径下的java命令。这就是PATH的本质作用。
(另外,我只是拿现成的这个java配置在举例讲解,也指出了这个java配置是不合理的。java的具体环境配置还请自行搜索。现附一条参考:https://www.zhihu.com/question/29114464)
作者:doctordc
链接:https://www.jianshu.com/p/7ad61711beef
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。