在Linux的PATH环境变量中添加新路径
1.概述
在这个快速教程中,我们将重点介绍如何在Bash和Zsh中向Linux的PATH变量添加路径。
由于我们用于Bash的方法也适用于Zsh,所以我们首先解决如何在Bash中向PATH变量添加新路径的问题。
然后,我们将探索一些Zsh的具体方法来完成这项工作。
2.PATH变量
PATH变量是一个环境变量,包含一个有序的路径列表,Linux在运行一个命令时将搜索可执行文件。使用这些路径意味着我们在运行命令时不必指定一个绝对路径。
例如,如果我们想在Bash中打印Hello, world!,可以使用echo的命令,而不是/bin/echo,,只要/bin在PATH中即可。
echo "Hello, world!"
Linux按顺序遍历以冒号分隔的路径,直到找到一个可执行文件。因此,如果两个路径包含所需的可执行文件,Linux会使用第一个路径。
我们可以通过echo PATH环境变量来打印PATH变量的当前值。
echo $PATH
我们应该看到一个用冒号分隔的路径列表(确切的路径可能会有所不同)。
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
3.在Bash中添加一个新的路径
我们可以使用export命令在PATH变量中添加一个新的路径。
为了预置一个新的路径,例如/some/new/path,我们将PATH变量与我们的新路径重新分配在现有PATH变量(由$PATH代表)的开头。
export PATH=/some/new/path:$PATH
要追加一个新的路径,我们要用新的路径来重新分配PATH,并将其放在最后。
export PATH=$PATH:/some/new/path
4.bash的持久变化
当我们使用export命令并打开一个新的shell时,所添加的路径就会丢失。
4.1.在bash当前用户中
为了使我们对当前用户的修改得以持续,我们将我们的export命令添加到~/.profile.的末尾,如果~/.profile文件不存在,我们应该用touch命令来创建它。
touch ~/.profile
然后我们就可以把我们的export命令添加到~/.profile。
此外,我们需要打开一个新的shell,或. ~/.profile
,以实现这一变化。我们要执行
. ~/.profile
或者,如果我们使用Bash,我们可以使用source命令。
source ~/.profile
如果我们使用Bash,我们也可以将我们的export命令附加到~/.bash_profile,但我们的改变不会反映在其他shells,如Zsh.中。
我们不应该在~/.bashrc中加入我们的export 命令,因为只有interactive Bash shells会读取这个配置文件。如果我们打开一个非交互式的shell或Bash以外的shell,我们的PATH的改变将不会被反映出来。
4.2.在全局中
我们可以通过在在/etc/profile.d/中创建一个以.sh结尾的文件,并将我们的export命令添加到这个文件中,为类Unix系统中的所有用户添加一个新的路径。
例如,我们可以创建一个新的脚本文件,/etc/profile.d/example.sh,并添加以下一行,将/some/new/path附加到全局PATH:中。
export PATH=$PATH:/some/new/path
/etc/profile.d/中的所有脚本将在一个新的shell初始化时被执行。因此,我们需要打开一个新的shell,使我们的全局变化生效。
我们也可以将我们的新路径直接添加到/etc/environment文件中现有的PATH中。
PATH=<existing_PATH>:/some/new/path
/etc/environment文件并不是一个脚本文件,它只包含简单的变量分配,而且它的灵活性不如脚本。正因为如此,我们不鼓励在/etc/environment中进行PATH的修改。我们建议在/etc/profile.d中添加一个新的脚本来代替。
5.Zsh中的$PATH
Zsh越来越受欢迎,因为它提供了一系列丰富的优秀功能。现在让我们看看如何在Zsh中添加一个新路径。
5.1.在Zsh中添加一个新的路径条目
到目前为止,我们已经学会了在Bash中添加新路径的方法。首先,这些方法也适用于Zsh。
如果我们的shell是Zsh,我们可以用数组的方式在$PATH变量中追加一个新的路径。
zsh% echo $PATH
/usr/local/bin:/usr/bin:/bin
zsh% path+=/a/new/path
zsh% echo $PATH
/usr/local/bin:/usr/bin:/bin:/a/new/path
如上面的例子所示,我们用path+=/a/new/path向$PATH追加一个新路径。请注意,我们使用了小写的path+=…。
这是因为path是一个数组。它也会影响到它的大写字母伙伴$PATH。Zsh默认用typeset builtin来绑定这两者。
同样地,我们也可以在数组中预置一个新的路径。
zsh% path=('/another/new/path' $path)
zsh% echo $PATH
/another/new/path:/usr/local/bin:/usr/bin:/bin:/a/new/path
然而,在向path数组添加新条目之后,我们不应该忘记’export $PATH,”,就像我们在Bash中做的那样。
5.2.持久的变化
为了兼容,Zsh首先获取.profile,,然后获取zshenv和zshrc.,也就是说,在zshenv和zshrc中的设置可能会覆盖.profile的配置。因此,对于Zsh来说,如果我们把设置放在Zsh特定的配置文件中就好了。
与bashrc文件类似,/etc/zshrc 或~/.zshrc仅用于交互式shell。所以它并不是一个理想的存放$PATH的地方。
因此,如果我们希望所有Zsh用户都有$PATH的设置,实际上是在全局范围内设置$PATH,我们可以把它放在/etc/zshenv。值得一提的是,这个文件可能不存在,如果我们想在全局范围内设置一些东西,我们可以创建它。
另一方面,如果我们想只为我们的用户设置$PATH,我们可以把$PATH放在~/.zshenv中。
6.结论
在这篇文章中,我们学习了Linux在运行命令时如何使用PATH变量来寻找可执行文件的。
我们可以对PATH,进行预置或追加,但要持久保存这些改变,我们需要把PATH配置放到正确的配置文件中。
这张表可以清楚地概括它。
当前用户的 | 全局性的 | |
Bash | ~/.profile | 在/etc/profile.d中的一个.sh文件。 |
Zsh | ~/.zshenv | /etc/zshenv |