系统范围的 $PATH 变量在哪里设置?

Don*_*ato 14 command-line bash

我使用的是 Ubuntu Desktop 14.04,因此,我使用的是非登录 shell。当我打开 GUI 终端时,首先非登录 shell 会话读取以下启动文件:

/etc/bash.bashrc
~/.bashrc
Run Code Online (Sandbox Code Playgroud)

非登录shell继承了父进程的环境,也就是登录shell,所以session也会读取如下启动文件:

/etc/profile
~/.bash_profile
Run Code Online (Sandbox Code Playgroud)

但是,我无法在任何这些文件中找到$PATH系统范围的路径,例如/bin, /sbin, /usr/bin, /usr/sbin, 设置。$PATH这些目录的集合在哪里?

hee*_*ayl 20

(默认)系统范围PATH/etc/environment文件中设置。

$ cat /etc/environment 
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
Run Code Online (Sandbox Code Playgroud)

它基本上是保存全局环境变量的地方。

  • @BenJohnson 这仅仅是因为`/etc/environment`(和`~/.pam/environment`)是由`pam_env` PAM 模块读取的,而不是shell 或任何其他理解shell/环境变量的东西;`~` 扩展也是如此。所以,你需要在那里使用绝对路径。 (2认同)