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


strike @ blackcat 31 $ logout
Executing /Users/strike/.bash_logout
(Interactive, login shell)
如前所述,交互的登录 Shell 将运行 ~/.bash_logout 。
清单 2 显示了一个示例 ~/.bash_profile 文件 。这个文件是用于在启动时自定义您的 Shell 的一种可选的方法 。
清单 2. 示例 ~/.bash_profile 文件
echo "Executing $HOME/.bash_profile"
echo '(Interactive, login shell)'
PS1='u @ h # $ '
export PS1
PAGER=/usr/bin/less
export PAGER
. .aliases
接下来,让我们看看当您从提示符处启动一个新的 Shell 时发生了什么 。这个新的 Shell 是交互的,但它不是登录 Shell 。根据规则,~/.bashrc 是唯一等待运行的文件 。
strike @ blackcat 1 $ bash
Executing /Users/strike/.bashrc
(Interactive shell)
blackcat:~ strike$
并且事实上,~/.bashrc 是唯一需要执行的文件 。其证据就位于提示符中,底部的提示符是缺省的 Bash 提示符,而不是在 ~/.bash_profile 中定义的提示符 。
要测试注销脚本,可以输入 exit(您不能在非登录 Shell 中输入 logout) 。您应该看到:
blackcat:~ strike$ exit
exit
Executing $HOME/.bash_logout
(Interactive, login shell)
strike @ blackcat 2 $
当一个交互的登录 Shell 终止的时候,它将执行 ~/.bash_logout 。您可以使用这一特性以删除临时文件、复制文件作为一种简单备份方法、或者甚至启动 rsync 以便传播当前会话中所做的任何更改 。
清单 3 显示了一个示例 ~/.bashrc 文件 。这个文件是用于非交互的 Bash Shell 实例的初始化文件 。
清单 3. 示例 ~/.bashrc 文件
echo "Executing $HOME/.bashrc"
echo "(Interactive shell)"
PATH="/usr/local/bin:$PATH"
export PATH
下面是另一个实验:当您运行 SSH 时,会得到哪一种 Shell 呢?让我们试试两种变体 。(您可以简单地使用 SSH 以返回到您的本地计算机,这就好像您从远程计算机上运行 SSH 一样 。)首先,使用 SSH 登录到远程计算机:
strike @ blackcat 1 $ ssh blackcat
Last login: Tue Apr 17 21:17:35 2007
Executing /etc/profile
(Interactive, login shell)
Executing /Users/strike/.bash_profile
(Interactive, login shell)
Including /Users/strike/.aliases
strike @ blackcat 1 $
正如您所预期的,运行 SSH 以访问远程计算机将启动一个新的登录 Shell 。接下来,当您在远程计算机上运行一个命令时,又会发生什么事情呢?答案如下:
strike @ blackcat 3 $ ssh blackcat ls
Executing /Users/strike/.bashrc
(Interactive shell)
villians.txt
heroes.txt
使用 SSH 远程地运行一个命令将产生非登录的交互 Shell 。它为什么是交互的呢?这是因为远程命令的标准输入和标准输出都绑定到了您的键盘和显示器,这正是 SSH 的神奇之处 。
清单 4 显示了 ~/.bash_logout 。这个文件将在 Shell 终止的时候运行 。
清单 4. 示例 ~/.bash_logout 文件
echo "Executing $HOME/.bash_logout"
echo "(Interactive, login shell)"
关于启动文件的有价值的技巧
您使用 Shell 的次数越多,那么您就越能够从在启动文件中保存您的首选设置中获利 。下面是一些用于组织您的 Bash 设置的有价值的技巧和建议 。(您可以在其他的 Shell 中应用相似的策略 。)
如果您希望在每个 Shell(不管它是什么模式的)中使用的设置(例如,PATH),那么您可以把这些设置放入到 ~/.bashrc 中,并在 ~/.bash_profile 中使用 source 访问文件 。
如果您拥有多台计算机(并且您的 home 目录没有在它们之间通过网络文件系统 [NFS] 共享)上的帐号,那么可以使用 rsync 将网络上所有计算机中的启动文件保持同步 。

推荐阅读