在Linux的PATH环境变量中添加新路径

评论 0 浏览 0 2019-08-11

1.概述

在这个快速教程中,我们将重点介绍如何在BashZsh中向Linux的PATH变量添加路径。

由于我们用于Bash的方法也适用于Zsh,所以我们首先解决如何在Bash中向PATH变量添加新路径的问题。

然后,我们将探索一些Zsh的具体方法来完成这项工作。

2.PATH变量

PATH变量是一个环境变量,包含一个有序的路径列表,Linux在运行一个命令时将搜索可执行文件。使用这些路径意味着我们在运行命令时不必指定一个绝对路径。

例如,如果我们想在Bash中打印Hello, world!,可以使用echo的命令,而不是/bin/echo,,只要/binPATH中即可。

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,,然后获取zshenvzshrc.,也就是说,zshenvzshrc中的设置可能会覆盖.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

最后更新2022-11-17
0 个评论
标签