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。