二、特权帐户临时需要用到某些环境变量。
有时候,特权帐户root在进行某些作业时,可能临时需要某些帐户的环境变量。此时该如何处理呢?由于按照第一个规则,这些环境变量可能是设置在用户主目录下的脚本文件中,所以对于特权用户root来说,这些环境变量也是无效的。而现在root账户在执行某个作业时,又需要这些环境变量。如就如上面所说,在Unix操作系统上部署了一个Oracle数据库系统。此时系统工程师需要使用iexpdb工具来备份数据库系统。为此系统工程师可能设置了一个备份的脚本程序。系统利用cron命令来周期性的自动执行。可是这个命令必须要在root帐户下才能够运行。当在root账户下运行这个脚本程序的时候,就会提示一个错误信息(提示说找不到这个命令)。可是在Oracle账户下执行这个脚本程序命名没有问题,这到底是什么原因所造成的呢?原来在这个备份的脚本程序中需要用到iexpdb命令,而这个命令是Oracle数据库系统所特有的,而不是Unix操作系统的命令。而在root用户下没有Oracle数据库的环境变量,为此其就不能够识别Oracle数据库系统的下的相关命令。
遇到这种情况该如何处理呢?在root用户的主目录下的profile的配置文件中也设置Oralce数据库系统的环境变量呢?这个解决方案是可行的,但是却有一点小题大作。如果在root账户目录下的脚本文件中配置这个环境变量的话,那么其在从root账户登陆开始就会生效。这可能与系统工程师的希望有点远。系统工程师可能只希望只在备份的会话中这个环境变量有效。而当会话结束时,这个环境变量自动失效。如此的话,仍然可以保持包环境变量的独立性。这个需求是否可以实现呢?其实笔者现在就是这么做的。笔者在备份的脚本程序开头部分,通过set等关键字设置了所需要的环境变量。当root 用户执行这个备份的脚本程序时,会首先这些开头定义的环境变量设置语句。那么当执行后面的备份命令时,root用户就可能设别这个命令。当这个会话结束时,这些环境变量又会自动失效。
所以说,如果root等特权用户只有在特定的情况下才使用某些环境变量的时候,虽然在帐户启动脚本文件中设置环境变量可以实现。但是这么做并不是最好的处理方法。通常情况下,笔者建议是在某些需要执行的脚本程序中直接加入设置环境变量的值。这么做的好处就是保证某些环境变量只对特定的会话有效。当这个会话结束的时候,这些环境变量就会失效。这可以在很大程度上确保环境变量的独立性。