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下是如何工作的,应该放在哪里?
这里要掌握的基本概念是PATH可以在很多地方定义。正如@demure 在他的回答中解释的那样,PATH=$PATH:/new/dir
意味着添加 /new_dir
到$PATH
,它不会清除原始$PATH
.
现在,有许多文件的原因之一login
与non-login
shell的概念密切相关。在这里看到一个很好的总结。以下内容来自 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
.