2021-04-27 | 研究与探索 | UNLOCK

Linux 的 PATH 环境变量与 bash 启动文件

PATH 环境变量用于 shell 检索命令时,它会按顺序尝试其中每个路径,看看里面是否有与要执行的命令相符的可执行文件。

Windows 下环境变量可以统一设置,很方便,但对于程序员来说就有些辛苦,要将各种命令行工具的路径加入 PATH 环境变量里。

曾经我很迷惑 Linux 下的 PATH 到底应该如何设置,经过一番查阅总算弄明白了。

直接看 bash 的 man page 就能知道,bash 在作为登录 shell 启动时会首先执行 /etc/profile,然后依次查找 ~/.bash_profile~/.bash_login~/.profile 并执行最先找到的那个,而作为非登录交互式 shell 启动时则会执行 ~/.bashrc。bash 的默认 PATH 变量完全靠这些启动文件来设置。

一图胜千言:

来源:https://www.solipsys.co.uk/new/BashInitialisationFiles.html

我使用的 Arch Linux 的 /etc/profile 文件直接向 PATH,添加了 /usr/local/sbin/usr/local/bin/usr/local/bin/etc/profile 还依次执行 /etc/profile.d/*.sh,使得 Java 和 Perl 的相关路径也加进了 PATH~/.bash_profile 则只有一句在交互模式下执行 ~/.bashrc

知道了具体原理,就可以好好配置 PATH 了。对我而言,我的 Rust 工具链是手动安装的,所以要手动配置 PATH。安装位置是 ~/.cargo/bin,只在当前用户安装,且只在登录时设置一次即可,所以修改 ~/.bash_profile,加上 source "$HOME/.cargo/env"

经实验, ~/.bash_profile 会影响 KDE 桌面环境中的环境变量,可能是我用的 SDDM 从 bash shell 中 启动的 KDE。