| 操作系统 办公 实用知识 设计 开发 WEB开发 移动开发 数据库 软件工程 网管 安全 管理 信息化 答疑 渠道 |
Unix的环境变量一、SHELL的功能及分类 SHELL是UNIX作业系统中的''命令编译器''(Command Inter-preter),它基本上是一个常驻的执行程式,它在使用者一签入成功後就立即被载入(可在签入後以ps指令看到),主要功能则在於接受使用者的指令、寻找命令(即档案)的所在并加以执行。因此,SHELL的不同可能直接影响使用者输入指令的方式、档案寻找的程序及速度等。 UNIX作业系统的SHELL大致可分为两大系统,一是1970年代前期由美国贝尔实验室(BELL LAB)所发展的sh(Bourne Shell),它是UNIX系统中的标准SHELL,此一系统後来又发展出ksh(Korne Shell)、bash(Bourne Again Shell)等功能更多的介面;另一系统是美国柏克来大学(Berkekey)在1970年代後期所发展的csh(C Shell),和它属於同一系统的有tcsh等。 无论上述的那一种shell,它的基本功能与作用都是相同的,它们之间的不同处可能在於对同一动作处理程序上的不同(会影响命令处理的速度)、所提供内键命令及变数的或多或寡等,其中内部命令与变数的多寡直接影响到shell功能的多寡,是使用者在使用时最容易直接感受到的。 在UNIX系统中,使用者可视自己的需要执行sh、ksh、bash、csh或tcsh来代替原先使用的shell、改变正在使用的环境;也可以用''chsh''指令、输入想使用的shell的路径及名称(如/bin/csh,在Y11-Y14机器上还需输入个人使用者的密码),改变以後每次login时所使用的shell、使自己所使用的环境能最满足自己使用上的需要。 二、SHELL 的START FILES 不管你的login shell是那一种shell,每一个shell都有它自己的start files,我们设定理想环境时所需使用的指令与设定的变数,都可以写在这些start files中,在login时先後加以执行,这些start files的名称分别是: SHELL START FILES sh /etc/profile 如果这些档案都存在,那麽它们的执行顺序将是: 在这些start files中,/etc下的profile是系统管理者为大家设定的,一般使用者无法做任何更动,如果对系统管理者的设定觉得不够或不符需要,则可在个人帐号下的.profile、.cshrc、.login增加或修正,尤其是对csh及tcsh的使用者而言,因为在/etc下并没有start files,所以也不会有系统管理者设定好的环境可以使用,使用者就必须自行设定所需要的所有的变数与指令,否则常会有寸步难行的感觉,最常见的如许多指令都因找不到而不能用(因为没有设path)、键无法使用(因键的作用没有定义)...等。 三、常见的需求与常用的指令 当我们在UNIX环境中工作,常会为了使自己使用时更方便而产生某些需求,这些常见的需求及其设定方式如: 1. 希望键能有作用 在$HOME/.profile或$HOME/.cshrc中加上stty erase "^H" 2. 希望在UNIX环境中能使用中文 在$HOME/.profile(sh系列)中加上 3. 希望能有像DOS系统中DOSKEY的功能 只要是使用bash及tcsh即具备此项功能。 4. 希望能使用工作站上的汉书编辑器(he) 在$HOME/.profile(sh系列)中加上 5. 希望提示符号能随着路径更动而改变 在sh及csh中并无法做到这个功能,而在bash及tcsh中的设定则分别是: 除了上面所提到针对特殊需要所做的设定之外,在做环境设定时常用到的指令还有: 1. stty cs7 cs8 olcuc (-olcuc) echo (-echo) stty除了这些叁数外,还可以用来定义某一个键的特定功能,如: 2. mesg y (mesg n) 3. umask [nnn] 4. Function 与 Alias vi(){ 其中,''vi''是function的名称,{}之间是''vi''这个function所包含的指令内容,而要注意的是:function的名称不能与shell的内键指令(builtin)名称相同,否则这个function即无法成立。 同样的功能,alias指令的用法如: alias vi ''mesg n; /usr/ucb/vi !*; mesg y'' 其中vi即是''''中所包含字串的别名,别名与各shell的builtin名称可以一样(alias本身也是一个内键指令)。 若我们在某一shell中同时建立一名称相同的function 与alias(如在bash中),则alias的执行次序优先於function 的执行。 四、常用变数设定 在UNIX环境中的变数可分为两类,一是环境变数(Enviroment Variable)、一是shell变数(Shell Variable),二者之间的不同处在於:环境变数不会因为shell间的更替而失去这个变数的作用,如PATH是一个环境变数,因此,即使您在设定好PATH之後再执行另一个shell(如原来是用sh、而後在sh环境中再执行csh),PATH这个环境变数仍能继续作用,而shell变数(如csh的cwd)则是只有在特定的shell下才有作用,一执行其他shell就失去作用。 在sh及csh二系列各有其不同的设定变数的方式,为: 1. Bourne Shell系列 如果当我们离开shell、进入另一个程式(如tin)之後,仍需要使用这个变数,则除了设定这个变数的值外,还需要以''export''指令加以宣告,如设定萤幕型态的变数TERM就需以''export''来宣告。 2. C Shell系列 其中''set''是单纯设定变数值,''setenv''则除了设定变数值外,还包含了类似sh中''export''的功能。 而无论是Bourne Shell或C Shell,它们都有一些基本的、共同的常用变数,如: 1. PATH 设定执行档的寻找路径,若现行目录也要包含在寻找的路径中,则需在设定路径时给予一''.'',表示现行目录亦包含在寻找的路径中,如: PATH=.:/bin:/usr/local/bin:/usr/ucb 或 2. EDITOR 设定想要使用的编辑器,如 3. HOME 设定个人帐号home directory的所在位置,通常在login时即叁考/etc/passwd而给予一设定值,因此除非使用者有某些特殊需求,通常不会重新设定。 4. SHELL 同样是在login时即会叁考/etc/passwd的内容而自动设定,使用者即使重新设定这个变数的内容,对帐号的使用也不会有任何影响。 5. 提示符号的设定 在sh 中: PS1="[STRING]" 当然以上所列的只是使用得较为广泛的变数,若您觉得这些不够用,可用man sh、man csh、man tcsh、man bash指令查阅各shell的说明,在其中您将可看到各个shell所包含的变数及各变数的用法。 若不清楚某一变数的设定内容,可用''echo $[VAR]''来观察变数的内容,如: echo $PATH
前面所提到start files中的设定将在使用者login时执行,但当我们要在线上直接改变所使用的shell(如直接执行''csh''或''exec csh'',此时不会执行start files)或是要改变设定的内容,在编修了start files或script files之後,可利用下列指令将环境更新,而不必重新login: . [script file] (在sh 系列的shell中) 直接执行一个script file与用''.''、''source''指令执行各有其不同的效果,我们可建立一内容为 cd / (或cd [DIR]) 的script file来观察它们之间的差异: 因script file的执行环境是一内定或自定的subshell(可在script file的第一行用类似''#!/bin/csh''指令加以设定),所以它的直接执行并无法真正将shell环境的工作目录切换到/,而script file一结束,subshell即不存在、''cd /''指令的效果也告消失;而用''.''或''source''执行则是真正将shell的工作环境下的工作目录更换到/,不会因为scriptfile的结束而使档案中指令的效果消失。
今日推荐
|
重点推荐
领军企业技术文库
+更多领军技术文库
最新专题
电子杂志订阅
| ||||||||