Answers:
环境变量不仅用于用户首选项。它们是一种通用机制,用于将各种设置信息从父进程传递到其启动的子进程。
在很多情况下,流程将设置特定的环境变量以影响刚开始的流程。例如,脚本可能会故意重置其启动命令的语言环境设置,以便它可以解析它们的输出。许多大型软件包的构建脚本使用嵌套调用,make
这些调用通过环境变量相互协调。专用工具可能需要通过使用$ LD_PRELOAD或$ PATH技巧来更改它们启动的其他程序的工作条件。
如果用户在另一个编译器中运行长时间编译时在另一个窗口中执行某项操作,只会神奇地改变其背后所有进程的环境变量,则会导致疯狂和混乱。
其他环境变量包含有关启动进程的特定会话的信息。程序期望$ TERM描述它们所连接的特定终端(或终端仿真器)的命令集;进行常规的按用户设置将无法使用几种不同类型的终端登录到同一系统。即使您只有一个终端硬件并且从不远程登录,诸如此类的程序也screen
依赖于为其会话内运行的进程设置不同的$ TERM。
一个更好的问题是,为什么我们要使用进程到子进程的通信机制来进行用户首选项设置,而不是按用户数据库?
答:因为它工作得很好,使每个用户数据库的好处是不是足够大,改变的工作,一切都使用的是不是环境变量将被完成。
(我能想到的极少数偏好设置那里不会没有一些使用情况下,它的方便,以改变他们只是为了执行一个脚本,例如,所以为了减肥功能,一切仍然将需要重写由环境变量,从而增加了复杂性,并使用户更加困惑。
似乎不存在替代方案。例如,X资源是每个显示会话而不是每个进程。但是使用命令行程序很难访问它们-命令行程序通常需要用于甚至没有 X服务器连接的远程登录。