在Linux路径变量中添加路径
1. 概述
在本快速教程中,我们将重点介绍如何在Bash 和Zsh中添加 Linux PATH变量的路径。
由于我们用于 Bash 的方法也适用于 Zsh,因此我们将首先讨论如何在 Bash 中向PATH变量添加新路径。 然后我们将探索一些 Zsh 特定的方法来完成这项工作。
2. 路径变量
PATH 变量是一个环境变量,其中包含Linux 在运行命令时将搜索可执行文件**的有序路径列表。**使用这些路径意味着我们在运行命令时不必指定绝对路径。
例如,如果我们想打印Hello, world! 在 Bash 中, 可以使用命令echo 而不是/bin/echo,只要/bin在PATH中:
echo "Hello, world!"
Linux 按顺序遍历冒号分隔的路径,直到找到可执行文件。因此,如果两个路径包含所需的可执行文件,Linux 将使用第一个路径。
我们可以通过回显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. 本地
为了保留当前用户的更改,我们**将export命令添加到*~/.profile的末尾。如果~/.profile*文件不存在,我们应该使用touch 命令创建它:
touch ~/.profile
然后我们可以将导出命令添加到*~/.profile*。
此外,我们需要打开一个新的 shell,或者获取我们的*~/.profile*文件以反映更改。我们会执行:
. ~/.profile
或者,如果我们使用 Bash,我们可以使用source 命令:
source ~/.profile
如果我们使用 Bash,我们还可以将导出命令 附加到*~/.bash_profile* ,但我们的更改不会反映在其他 shell中,例如 Zsh。
**我们不应该将export命令添加到 ~/.bashrc **,因为只有交互式 Bash shell 才能读取此配置文件。如果我们打开非交互式 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 中。
同样,我们也可以在数组中添加一个新路径:
zsh% path=('/another/new/path' $path)
zsh% echo $PATH
/another/new/path:/usr/local/bin:/usr/bin:/bin:/a/new/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*中。**