| Parameter | Details |
|---|---|
| PATH | 路径环境变量 |
Section 44.1: 在 PATH 环境变量中添加路径
PATH 环境变量通常在 ~/.bashrc 或 ~/.bash_profile 或 /etc/profile 或 ~/.profile 或 /etc/bash.bashrc(特定发行版的 Bash 配置文件)中定义。
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:
/usr/lib/jvm/jdk1.8.0_92/bin:/usr/lib/jvm/jdk1.8.0_92/db/bin:/usr/lib/jvm/jdk1.8.0_92/jre/bin
现在,如果我们想在 PATH 变量中添加一个路径(例如 ~/bin):
PATH=~/bin:$PATH
# or
PATH=$PATH:~/bin
但这只会修改当前 shell(及其子 shell)中的 PATH。一旦退出 shell,修改就会消失。
要使其永久生效,我们需要在 ~/.bashrc 文件(或其他文件)中添加这段代码,然后重新加载该文件。
如果运行以下代码(在终端中),就能将 ~/bin 永久添加到 PATH 中:
echo 'PATH=~/bin:$PATH' >> ~/.bashrc && source ~/.bashrc
解释:
-
echo 'PATH=~/bin:$PATH' >> ~/.bashrc在~/.bashrc文件末尾添加一行PATH=~/bin:$PATH(你可以用文本编辑器来添加)。 -
source ~/.bashrc重新加载~/.bashrc文件
这是一段代码(在终端运行),它将检查路径是否已包含,如果未包含,则添加路径:
path=~/bin # path to be included
bashrc=~/.bashrc # bash file to be written and reloaded
# run the following code unmodified
echo $PATH | grep -q "\(^\|:\)$path\(:\|/\{0,1\}$\)" || echo "PATH=\$PATH:$path" >> "$bashrc";
source "$bashrc"
Section 44.2: 从 PATH 环境变量中删除路径
要从 PATH 环境变量中移除一个 PATH,你需要编辑 ~/.bashrc 或 ~/.bash_profile 或 /etc/profile 或 ~/.profile 或 /etc/bash.bashrc (特定发行版)文件,并移除特定路径的赋值。
与其查找确切的赋值,不如在最后阶段替换 $PATH 中的内容。
下文将安全地从 $PATH 中移除 $path:
path=~/bin
PATH="$(echo "$PATH" |sed -e "s#\(^\|:\)$(echo "$path" |sed -e 's/[^^]/[&]/g' -e 's/\^/\\^/g')\(:\|/\{0,1\}$\)#\1\2#" -e 's#:\+#:#g' -e 's#^:\|:$##g')"
要使其永久有效,您需要将其添加到 bash 配置文件的末尾。
你可以用一种功能性的方法来实现:
rpath(){
for path in "$@";do
PATH="$(echo "$PATH" |sed -e "s#\(^\|:\)$(echo "$path" |sed -e 's/[^^]/[&]/g' -e 's/\^/\\^/g')\(:\|/\{0,1\}$\)#\1\2#" -e 's#:\+#:#g' -e 's#^:\|:$##g')"
done
echo "$PATH"
}
PATH="$(rpath ~/bin /usr/local/sbin /usr/local/bin)"
PATH="$(rpath /usr/games)"
# etc ...
这样可以更容易地处理多条路径。
注意
你需要在 Bash 配置文件(~/.bashrc 或其他文件)中添加这些代码。
运行 source ~/.bashrc 重新加载 Bash 配置 (~/.bashrc) 文件。