三、常用变量设定
在UNIX环境中的变量可分为两类,一是环境变量(Enviroment Variable)、一是shell变量(Shell Variable),二者之间的不同处在於:环境变量不会因为shell间的更替而失去这个变量的作用,如PATH是一个环境变量,因此,即使您在设定好 PATH之後再执行另一个shell(如原来是用sh、而後在sh环境中再执行csh),PATH这个环境变量仍能继续作用,而shell变量(如csh 的cwd)则是只有在特定的shell下才有作用,一执行其他shell就失去作用。
在sh及csh二系列各有其不同的设定变量的方式,为:
1. Bourne Shell系列
[VAR]=[STRING or NUMBER]
export [VAR]
如果当我们离开shell、进入另一个程式(如tin)之後,仍需要使用这个变量,则除了设定这个变量的值外,还需要以'export'指令加以宣告,如设定萤幕型态的变量TERM就需以'export'来宣告。
2. C Shell系列
set [var] = [STRING or NUMBER]
setenv [var] [STRING or NUMBER]
其中'set'是单纯设定变量值,'setenv'则除了设定变量值外,还包含了类似sh中'export'的功能。
而无论是Bourne Shell或C Shell,它们都有一些基本的、共同的常用变量,如:
1. PATH
设定可执行文件的寻找路径,若现行目录也要包含在寻找的路径中,则需在设定路径时给予一'.',表示现行目录亦包含在寻找的路径中,如:
PATH=.:/bin:/usr/local/bin:/usr/ucb
或
set path=(. /bin /usr/local/bin /usr/ucb)
2. EDITOR
设定想要使用的编辑器,如
EDITOR=/usr/ucb/vi
或
setenv EDITOR /usr/ucb/vi
3. HOME
设定个人帐号home directory的所在位置,通常在login时即叁考/etc/passwd而给予一设定值,因此除非用户有某些特殊需求,通常不会重新设定。
4. SHELL
同样是在login时即会叁考/etc/passwd的内容而自动设定,用户即使重新设定这个变量的内容,对帐号的使用也不会有任何影响。
5. 提示符号的设定
在sh 中:
PS1="[STRING]"
PS2="[STRING]"
在csh中: set prompt="[STRING]"
当然以上所列的只是使用得较为广泛的变量,若您觉得这些不够用,可用man sh、man csh、man tcsh、man bash指令查阅各shell的说明,在其中您将可看到各个shell所包含的变量及各变量的用法。
若不清楚某一变量的设定内容,可用'echo $[VAR]'来观察变量的内容,如:
echo $PATH
四、SHELL 环境的异动
前面所提到start files中的设定将在用户login时执行,但当我们要在线上直接改变所使用的shell(如直接执行'csh'或'exec csh',此时不会执行start files)或是要改变设定的内容,在编修了start files或script files之後,可利用下列指令将环境更新,而不必重新login:
. [script file] (在sh 系列的shell中)
source [script files] (在csh系列的shell中)
直接执行一个script file与用'.'、'source'指令执行各有其不同的效果,我们可建立一内容为 cd / (或cd [DIR]) 的script file来观察它们之间的差异:
因script file的执行环境是一内定或自定的subshell(可在script file的第一行用类似'#!/bin/csh'指令加以设定),所以它的直接执行并无法真正将shell环境的工作目录切换到/,而script file一结束,subshell即不存在、'cd /'指令的效果也告消失;而用'.'或'source'执行则是真正将shell的工作环境下的工作目录更换到/,不会因为script file的结束而使文件中指令的效果消失。