环境变量可以作用于用户的整个工作环境。同时相关的应用程序也需要利用这些环境变量来获取进程运行的环境变量。不如邮件监测程序,默认情况下会没隔一段时间去查看一下是否有新的邮件。要实现这个功能的话这个邮件监测程序必须要知道邮件存储的位置与监测的频率。这两样东西就是通过Unix系统的环境变量来实现的。不过在实际工作中,不少Unix系统工程师忽视了环境变量的作用。或者说,没有把环境变量背后的价值挖掘出来。笔者这篇文章或许能够给广大Unix系统爱好者一点启示。
一、提示符的作用。
在谈提示符的价值之前,笔者先给大家看一下dos下提示符的显示格式。如下图所示,是微软XP操作系统下DOS版本的截图。
从这个截图中大家可以看出,DOS下的提示符是比较直观的。先是盘符,然后是当前的绝对路径,然后以>符号结尾。但是在Unix系统中却不是如此。在Unix系统下,其路径不是决定路径,而只是显示当前目录的名称。这就给平时的维护造成了一定的困难。那么在Unix系统下能否按DOS下的提示符格式来显示呢?即显示当前的绝对路径。要实现这个功能,就需要从Unix的提示符说起了。
提示符信息也是Unix操作系统中的环境变量。在shell环境中有两个提示符,分别为PS1与PS2。其中PS1为主提示字符串,即大家平常所看到的那个提示符(可能是一个美元符号$或者一个#字号)。通常情况下,如果当前用户是特权用户,则其主提示符可能为#;如果当前用户为普通用户,则其主提示符就为$符号。另外在shell进程中,还可以运行多条命令。此时系统会显示>提示符,这个提示符就是次级提示符,保存在PS2环境变量中。那么如何通过这个提示符来实现如上的需求呢?且听笔者慢慢道来。
1、首先需要显示的就是不管是主提示符还是次级提示符,都以>结束。此时系统工程师可以通过改变主提示符的值来实现。如可以通过$PS1=”>”命令来实现。这个命令的作用就是改变这个环境变量的值。另外有些人可能还喜欢在前面加入c:盘符,此时就可以把主提示符PS1的值设置为”c:>”。不过需要注意的是,Unix的文件系统跟微软的文件系统不一样。在Unix操作系统中,其只有一个跟目录,即一个树状结构;而在Windows操作系统中,每个分区都有一个根目录,都有一个独立的树状结构。故在Unix操作系统中没有C、D、E盘的区分。
2、其次是要实现在提示符中显示绝对路径。此时需要PWD环境变量的帮助。在Linux系统中,pwd命令可以用来显示当前的绝对路径。不过在Unix操作系统中的BASH中(shell的一种),专门提供了一个PWD环境变量。这个环境变量主要用来存储当前光标所在的绝对路径。PWD是一个动态的环境变量。当用户每次切换目录时,这个环境变量都将被重新赋值。如果要在提示符中显示当前的绝对路径,那么只需要把这个变量赋于给主提示符PS1即可。由于PWD变量动态改变的特性,此时主提示符也会随着PWD环境变量(绝对路径)的改变而改变。具体的赋值命令为:$PS1=’ $PWD’。这里笔者要强调一个小细节。当把一个环境变量赋值给另外一个环境变量时,则需要加入$符号。否则的话,Unix操作系统会把这个变量当作一个普通的字符串来对待。笔者在给学员进行培训时,这是他们经常犯的错误。这注意是因为他们可能受到以前经验的影响。因为在一些开发环境中编程的时候,在把某个变量的值赋值给其他变量时,不需要在变量前加入$等类似的特殊符号。但是这里需要注意,在Unix操作系统中如果把某个环境变量的值赋值给另外一个环境变量,必须要用$符号来标示,否则的话系统会把这个环境变量名字当作普通的字符来处理。
提示符除了可以模拟实现DOS提示符显示格式之外,还有其他一些重要的作用。如大部分系统工程师在管理Unix服务器的时候,不会直接通过Unix终端控制台来进行。而是利用ssh等远程连接协议进行远程登陆,进行远程维护。如果企业中Unix服务器比较多的话,系统工程师就可能会比较麻烦。因为在默认情况下,利用ssh协议远程登陆到Unix操作系统,在终端上不会显示Unix主机的名字。为此如果系统工程师在同一时刻连接了多台Unix服务器的话,则其就不能够一目了然的知道到底是哪台Unix服务器。在这种情况下,系统工程师就希望在提示符中能够显示Unix主机的名字。在bash环境中,有一个转义字符可以实现类似的需求。\h这个转义字符就是用来显示当前主机的名字。为此如果系统工程师需要提示符中显示主机的名字,则可以通过如下的命令来实现,$PS1=”\h”。如此设置后,在Unix操作系统提示符中就会显示当前主机的名字。这方面在Linux系统上就做的比较好,其默认情况下就会显示主机的名字。