Linux添加路径到PATH环境变量
Linux添加路径到PATH环境变量
一、PATH环境变量
PATH变量是Linux系统存储可执行文件搜索路径的地方,等价于Windows系统的Path变量,由于其他操作系统我没用过,不清楚详细情况,不作赘述。
类似于Windows系统的系统变量和用户变量,Linux的环境变量也存在两种类型:
- 系统启动时加载的各个配置文件建立或修改的变量,例如/etc/profile以及在它末尾加载的/etc/profile.d文件夹内的所有sh文件。它们类似于Windows的系统变量,对所有用户可见。
- 用户登陆时加载的各个配置文件建立或修改的变量,例如用户所使用的命令解释器(shell)的配置文件。他们类似于WIndows的用户变量仅对当前用户可见。
由于Linux中的应用程序并非都是全局安装,也有可能是为用户单独安装的,所以PATH变量中的路径有必要在不同时间添加。
二、添加方式
1. 直接使用export语句
例如:
#!/usr/bin/sh
# /etc/profile.d/jdk.sh
export PATH=$PATH:/usr/local/jvm/bin
或:
#~/.bashrc
......
export PATH=$PATH:~/.local/bin
......
这种方法最大的缺陷是容易出现重复添加的现象,尤其是写在用户shell的配置文件内的语句,在用户重新加载shell配置文件时会重复插入。当然重新加载配置文件导致的重复基本上可以通过写在仅登录期加载的shell配置文件(如zshell的.zlogin)中解决。
2. 借助函数
在ArchLinux的/etc/profile文件中,我发现了一个神奇的函数,并将它写在了我的.zshrc中:
appendpath()
{
case ":$PATH:" in
*:"$1":*)
;;
*)
PATH="${PATH:+$PATH:}$1"
esac
}
appendpath '~/.local/bin'
unset -f appendpath
export PATH
在向PATH变量添加路径之前,会先使用case的匹配机制判断待添加路径是否已经存在与PATH变量中,以此确定是否添加,执行完成后,使用uset命令接触函数名的占用。
这也是我目前使用的方法,可以完美的避免路径重复的问题,虽然它的出处只是用来修改PATH,但像CLASSPATH这种列表型的环境变量也可以使用这种方法。
尾注:我在博客园开博客的主要目的是找一个方便的云笔记平台,内容都是平时的一些随记,个人并不追求文笔严谨,所以拜请不幸翻到这篇博客的网友们高抬贵手,不要吐槽我。