关于PATH环境变量的详细介绍

PATH环境变量的介绍

PATH是一个系统的环境变量,它用法很多人都了解,是指定命令的搜索路径。
本例子在Linux下讲解。
比如说,在/opt/games/csgo文件夹下有一个名为playcsgo的可执行文件,作用是启动游戏。
那么,假如你需要运行它,你必需要输入绝对路径,例如:

/opt/games/csgo/playcsgo

此时,不出问题的话,游戏已经开始了。
但是,路径是很繁长的,每次都要用绝对路径来运行,绝对是个麻烦事。
此时PATH环境变量的作用就显现出来了,我希望实现输入playcsgo即可开始游戏,无需前边冗长的路径信息。
所以,此时只需要输入以下命令

# export命令的作用是设置环境变量的值
export PATH=/opt/games/csgo

先将PATH环境变量的值赋值为对应可执行文件所在的目录,后紧接着输入

playcsgo

此时就可以实现省略前边的路径部分了,因为你输入了一个命令,命令就是一个可执行程序,系统会自动在PATH所提供的路径中寻找和你输入命令的名字一致的可执行文件,然后对应执行。

PATH环境变量的通常用法

其实系统中默认的PATH是有值的,在Linux下,通常包括/usr/bin,那么对Linux不那么熟悉的可以去看一下,平时用的非常频繁的命令,比如cd,mkdir,rm等,都可以在这个目录下找到对应的可执行文件。
但是,值得注意的是,PATH中,允许放入多个路径,不仅PATH,其他环境变量也是这样。
在Linux操作系统下,不同的值以英文冒号":"分割,Windows下以英文分号";"分割。
例如:
当你输入了上边提到的export PATH=/opt/games/csgo命令后,你将无法使用cd,mkdir等这些命令了,因为你将PATH重新赋值后,其中不再包含/usr/bin,而这些常用命令通常就是在这个目录下,所以会报错显示没有找到命令或可执行文件。
那么如何解决?

# 如上所说,两个路径以英文分号隔开
export PATH=/usr/bin:/opt/games/csgo

但是还是产生了一个问题,假如原来的PATH不止有/usr/bin呢,可能还包含其他路径,比如Java的JDK,此时如果这么做,其他的路径就会失效。
所以,下面这个方法,才是最最最正确的用法

# $PATH表示取的环境变量PATH的值
export PATH=$PATH:/opt/games/csgo

这里的意思是追加/opt/games/csgo到PATH原有值的末尾。
如图所示:

这时既不影响原有变量的值,还能放心的添加自己想要的路径。

有些问题需要注意一下

Q:假如PATH变量中,多个路径有相同名称的可执行文件,那么它要优先选择哪个?
A:优先选择路径位于PATH变量靠前的位置的,从上边图中可以看到,PATH变量的储存方式是一串字符串,其中以:隔开,这表示他们是有顺序之分的,系统会优先选择位置靠前的值。

Q:在终端中输入上述设置变量的命令,会一直有效吗?
A:不会,只在此刻此终端下有效,其他终端无效,并且当你关掉此终端时,你所设置的将丢失;在shell脚本中也是,只在脚本的运行范围内有效。

Q:如何设置长期有效的环境变量?
A:Windows下很容易,有变量的设置界面,Linux下可以在各种开机自启动脚本中写入设置命令。

Q:有些软件需要特定版本的JRE,我怎么让他们所使用的JAVA版本各不相同?
A:首先你必须准备所有所需要的版本的JRE,把他们放在不同的文件夹下,然后对每个程序编写运行脚本,shell脚本只在脚本的范围内有效,所以这种方式不会影响到其他程序。
脚本内容示例:

# 假定该程序所需JRE的路径为:/usr/jre8
export PATH=$PATH:/usr/jre8/bin #加bin是因为jre的可执行文件通常在安装目录的bin目录下
java playcsgo #这个命令是执行你想要用上边设置的jre运行的java程序。

当然,如果大家有其他需要补充或者提问的,可以留言。

posted @ 2021-04-04 18:12  Maicss  阅读(415)  评论(0编辑  收藏  举报