小编典典

如何在 Linux/Unix 上永久设置 $PATH

all

在 Linux 上,如何将目录添加到 $PATH 以便它在不同的会话中保持不变?

背景

我正在尝试将目录添加到我的路径中,以便它始终位于我的 Linux 路径中。我试过了:

export PATH=$PATH:/path/to/dir

这可行,但是每次我退出终端并启动一个新的终端实例时,这条路径都会丢失,我需要再次运行导出命令。

我该怎么做才能永久设置?


阅读 189

收藏
2022-02-28

共1个答案

小编典典

有多种方法可以做到这一点。实际的解决方案取决于目的。

变量值通常存储在分配列表或在系统或用户会话开始时运行的 shell 脚本中。对于 shell 脚本,您必须使用特定的 shell
语法和export/或set命令。

系统范围

  1. /etc/environment唯一任务列表。允许引用。非常适合添加系统范围的目录/usr/local/something/bin,例如PATH变量或定义JAVA_HOME. 由PAMsystemd使用。

  2. /etc/environment.d/*.conf唯一任务列表。允许引用。非常适合添加系统范围的目录/usr/local/something/bin,例如PATH变量或定义JAVA_HOME. 配置可以拆分为多个文件,通常每个工具(Java、Go 和 Node.js)一个文件。由 systemd 使用,设计上不会将这些值传递给用户登录 shell。

  3. /etc/xprofile启动 X Window 系统会话时执行的 Shell 脚本。这是为每个登录到 X Window System 的用户运行的。PATH对于对每个用户都有效的条目来说,这是一个不错的选择,例如/usr/local/something/bin. 该文件包含在其他脚本中,因此请使用 POSIX shell 语法而不是用户 shell 的语法。

  4. /etc/profile/etc/profile.d/*外壳脚本。对于纯 shell 系统,这是一个不错的选择。这些文件只能由登录模式下的 shell 读取。

  5. /etc/<shell>.<shell>rc. 外壳脚本。这是一个糟糕的选择,因为它是特定于单个 shell 的。在非登录模式下使用。

用户会话

  1. ~/.pam_environment. 唯一分配列表,不允许引用。由 PAM 在每个用户会话开始时加载,与 X Window 系统会话或 shell 无关。您不能引用其他变量,包括HOMEPATH因此它的用途有限。由 PAM 使用。

  2. ~/.xprofile外壳脚本。这在用户登录 X Window System 系统时执行。此处定义的变量对每个 X 应用程序都是可见的。PATH使用诸如~/binor~/go/bin或定义用户特定GOPATHor之类的值进行扩展的完美选择NPM_HOME。该文件包含在其他脚本中,因此请使用 POSIX shell 语法而不是用户 shell 的语法。通过快捷方式启动的图形文本编辑器或 IDE 将看到这些值。

  3. ~/.profile, ~/.<shell>_profile, ~/.<shell>_loginShell 脚本。它仅对从终端或终端仿真器启动的程序可见。对于纯 shell 系统来说,这是一个不错的选择。由 shell 在登录模式下使用。

  4. ~/.<shell>rc. 外壳脚本。这是一个糟糕的选择,因为它是特定于单个 shell 的。由非登录模式下的 shell 使用。

笔记

Wayland上的GNOME启动用户登录
shell 来获取环境。~/.profile它有效地使用~/.<shell>_profile了登录 shell
配置~/.<shell>_login文件。

手册页

特定于发行版的文档

2022-02-28