在 Linux 上,我如何将一个目录添加到 $PATH
中,以便在不同的会话中持续有效?
背景:
我正尝试将一个目录添加到我的路径中,以便它将始终在我的 Linux PATH 中。我已经试过:
export PATH=$PATH:/path/to/dir
这样做有效,但是每次我退出终端并启动一个新的终端实例时,这个路径就会丢失,我需要再次运行 export
命令。
我该如何做才能使这个设置永久生效?
有多种方法可以实现。实际的解决办法取决于用户意图。
环境变量值通常存储在一个赋值列表中或是在系统或用户会话开始时运行的 shell 脚本中。在 shell 脚本的情况下,必须使用特定的 shell 语法以及 export
或 set
命令。
1./etc/environment
:唯一赋值列表。允许引用。非常适合将像 /usr/local/something/bin
这样的系统级目录添加到 PATH
变量或者定义 JAVA_HOME
。由 PAM 和 systemd 使用。
2./etc/environment.d/*.conf
:唯一赋值列表。用途同上。配置可以拆分成多个文件,通常每个工具(如 Java、Go 和 Node.js)一个文件。由 systemd 使用,设计上不会将这些值传递给用户的登录 shell。
3./etc/xprofile
:在启动 X Window System 会话时执行的 shell 脚本。这是为登录到 X Window 系统的每个用户运行的。对于每个用户都有效的 PATH 条目,如 /usr/local/something/bin
,这是一个很好的选择。该文件被其他脚本包含,因此使用 POSIX shell 语法,而不是你的用户 shell 语法。
4./etc/profile
和 /etc/profile.d/*
:shell 脚本。这是 shell-only 系统的一个好选择。这些文件仅由处于登录模式的 shell 读取。
5./etc/<shell>.<shell>rc
:shell 脚本。这是一个较差的选择,因为它只适用于单一 shell。用于非登录模式。
1.~/.pam_environment
:唯一赋值列表,不允许引用。由 PAM 在每个用户会话开始时加载,无论它是 X Window System 会话还是 shell。不能引用其他变量,包括 HOME
或 PATH
,因此用途有限。由 PAM 使用。
2.~/.xprofile
:shell 脚本。当用户登录到 X Window System 系统时执行。在这里定义的变量对每一个 X 应用程序都是可见的。非常适合扩展 PATH,如加入 ~/bin
或 ~/go/bin
或者定义用户特定的 GOPATH
或 NPM_HOME
。此文件由其他脚本包含,因此应使用 POSIX shell 语法而非用户 shell 的语法。通过快捷方式启动的图形文本编辑器或 IDE 将看到这些值。
3.~/.profile
,~/.<shell>_profile
,~/.<shell>_login
:shell 脚本。仅对从终端或终端模拟器启动的程序可见。适用于 shell-only 系统。由处于登录模式的 shell 使用。
4.~/.<shell>rc
:shell 脚本。它只适用于单一 shell。由处于非登录模式的 shell 使用。 如果你主要使用一个特定的 shell(如 bash、zsh 等),那么你可以在这个文件中为该 shell 进行个性化设置,而不影响其他 shell。对于那些只需要在非登录 shell 中生效的设置,使用 ~/.<shell>rc
可以避免在全局配置文件中添加额外的条件判断,从而使配置更加简洁。
•stackoverflow question 14637979•man environment•man environment.d