对话 UNIX: 第 10 部分,定制您的 Shell( 二 )


Shell 启动脚本 可以提供这种持久性 。在 Shell 启动和终止时,将执行一系列脚本,以便初始化和重新设置您的环境 。有些启动脚本是系统范围的(由您的系统管理员来配置它们),而其他的一些脚本,您可以根据需要进行自定义 。
启动脚本与微软的 甒indows?中的 INI 文件有所不同 。顾名思义,启动脚本是真正的 Shell 脚本,即为实现某些工作而编写的小程序 。在这种情况下,无论何时启动或终止 Shell,都将运行这些 Shell 脚本,并对 Shell 环境产生影响 。
由此开始!
通常,每种 Shell 都提供了一些 Shell 启动脚本,并且每种 Shell 都规定了脚本运行的顺序 。一般情况下,至少提供了一个系统范围的启动文件和一个个人(每个用户的)的启动文件 。可以将整个 Shell 启动序列看作一种层叠的方式:运行(潜在地)多个脚本,其效果是累积的,并且您可以在后续的脚本中否定或者改变序列中以前的参数设置 。
【对话 UNIX: 第 10 部分,定制您的 Shell】例如,您的系统管理员可能在系统范围的 Shell 启动文件中为整个系统设置了一个很有帮助的缺省 Shell 提示符,例如,包括您的用户名、当前工作目录和命令历史编号 。然而,通过在自己的启动脚本中,根据您的喜好重新设置 Shell 提示,您可以覆盖这个文件 。否则,如果您不改变系统范围的设置,那么它会在您的 Shell 和环境中生效 。
通常,最先执行的启动脚本是系统范围的,如 /etc/profile,并且由您的系统管理员对它们进行管理 。系统范围启动文件的目的不是干扰您的工作环境,而是简化系统特定资源的使用 。例如,如果您的系统管理员坚持让您使用安全 Shell(SSH)实用工具的更新的版本,因为原先的版本存在众所周知的安全缺陷,他或者她可能将每个用户的初始 PATH 变量设置为 /usr/local/bin:/bin:/usr/bin,这样一来,将优先执行在 /usr/local/bin 中找到的可执行文件 。(如果在 /usr/local/bin 中没有找到该命令,Shell 将在 /usr/bin 中继续查找 。)系统范围的启动文件也可用于命名打印机,显示关于计划停机的公告,并为新用户提供合理的 Shell 缺省值 。(这样就不会把新手给弄糊涂了 。)
在运行了系统范围的脚本之后,Shell 将运行用户特定的启动脚本 。这些脚本文件非常适合保存您最喜欢的别名、环境设置和其他首选项 。
为 Bash 做好准备
对于不同的 Shell,启动脚本的个数和名字也有所不同 。让我们来看看 Bash Shell(/bin/bash)的启动顺序 。Bash Shell 建立于 Unix 和 Linux?之上,并且 Bash Shell 通常是新的系统和用户的缺省 Shell 。它也是许多其他 Shell 的代表,因此在这里可以将它作为一个很好的示例 。(如果您使用的是另一种 Shell,可以参考它的文档或者手册页面,以获取关于它的启动脚本名字和处理顺序的信息 。)
Bash 将搜索六 个启动脚本,但是所有这些脚本都是可选的 。即使这六个脚本都存在并且可读,但是在任何情况下,Bash 仅执行这六个脚本的一个子集 。
如果 /etc/profile 存在并且可以由该用户进行读取,那么 Bash 将首先执行它,这是系统范围的启动文件 。在读取了这个文件之后,Bash 按照顺序寻找 ~/.bash_profile、~/.bash_login、~/.profile 和 ~/.bashrc,其中 ~ 是表示该用户 home 目录的 Shell 缩写(也可以表示为 $HOME) 。如果您退出 Bash,那么 Shell 将查找 ~/.bash_logout 。
究竟执行这六个文件中的哪些,这取决于新的 Shell 的“模式 。Shell 可以是登录 Shell,是或者不是交互的 。(登录 Shell 也是一种交互的 Shell;然而,您可以强制非交互的 Shell 按照登录 Shell 的方式工作 。稍后将详细介绍这一内容 。)

推荐阅读