路径环境变量在 Linux 中是如何工作的?

die*_*lar 9 path environment-variables session

我很困惑 PATH 环境变量在 Linux 下是如何工作的。我是 Linux Mint 15 用户。

首先,我阅读了有关编辑/home/.bashrc文件和执行.a文件的内容PATH=$PATH:/directory
但我也知道其中管理的一些路径内容/etc/bash.bashrc
,因此/usr/local/bin可以从 shell 的任何位置访问安装在其中的任何软件。

路径变量在Linux下是如何工作的,应该放在哪里?

ter*_*don 9

这里要掌握的基本概念是PATH可以在很多地方定义。正如@demure 在他的回答中解释的那样,PATH=$PATH:/new/dir意味着添加 /new_dir$PATH,它不会清除原始$PATH.

现在,有许多文件的原因之一loginnon-loginshell的概念密切相关。在这里看到一个很好的总结。以下内容来自 bash 手册页(重点是我的):

当 bash 作为交互式登录 shell 或作为具有 --login 选项的非交互式 shell 调用时,它首先从文件 /etc/profile 读取并执行命令(如果该文件存在)。读取该文件后,它会按顺序查找 ~/.bash_profile、~/.bash_login 和 ~/.profile,并从第一个存在且可读的命令中读取和执行命令。当 shell 启动时可以使用 --noprofile 选项来禁止这种行为。

当您第一次登录系统时,您会启动一个登录shell,因此 bash 将读取上面列出的文件。大多数发行版都设置了系统范围$PATH(适用于所有用户)/etc/profile,您应该在此处进行要应用于所有用户的任何更改。这是我在 Debian 上的内容:

PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
Run Code Online (Sandbox Code Playgroud)

登录后,当您打开终端时,您将启动一个交互式的非登录shell。这是man bash不得不说的那些:

   When  an  interactive shell that is not a login shell
   is started, bash reads  and  executes  commands  from
   /etc/bash.bashrc and ~/.bashrc, if these files exist.
Run Code Online (Sandbox Code Playgroud)

因此,每次打开新终端时都会读取这些文件。您的最终 $PATH 是所有文件中值的组合。在典型情况下,您使用图形登录管理器登录并开始新会话。在这一点上,您$PATH是在各种profile文件中定义的任何内容。如果您打开一个终端,那么您将处于一个交互式 shell 中,并且bashrc会读取不同的文件,这些文件可能会将内容附加到$PATH.


总而言之,您真正需要知道的是您可以$PATH通过编辑$HOME/.profile.