Unix的环境
变量
一、SHELL 的START FILES
不管你的login shell是那一种shell,每一个shell都有它本身
的start files,我们设定理想环境
时所需应用
的指令与设定的变量,都可以写在这些start files中,在login时先後加以推行
,这些start files的名称判别
是:
SHELL START FILES
sh /etc/profile
$HOME/.profile
bash /etc/profile
$HOME/.profile(or $HOME/.bashrc)
csh None
$HOME/.cshrc & $HOME/.login
tcsh None
$HOME/.cshrc(or $HOME/.tcshrc)
& $HOME/.login
假如
这些文件都存在,那麽它们的推行
序次
将是:
1. sh系列 /etc/profile -->; $HOME/.profile
2. csh系列 $HOME/.cshrc -->; $HOME/.login
在这些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系列)中加上
stty -istrip cs8
LC_CTYPE=ISO_8859_1
export LC_CTYPE
在$HOME/.cshrc(csh系列)中加上
stty -istrip cs8
setenv LC_CTYPE iso_8859_1
3. 渴望
能有像DOS体系
中DOSKEY的功能
只要是应用
bash及tcsh即具备此项功能。
4. 渴望
能应用
事变
站上的汉书编辑
器(he)
在$HOME/.profile(sh系列)中加上
LANG=big5
export LANG
在$HOME/.cshrc(csh系列)中加上
setenv LANG big5
5. 渴望
提醒
标记
能随着路径更动而变化
在sh及csh中并无法做到这个功能,而在bash及tcsh中的设定则判别
是:
bash:在$HOME/.profile中加上
PS1='`PWD`>; '
或 PS1="w>; "
tcsh:在$HOME/.cshrc中加上
set prompt='%~>; '
除了上面所提到针对出格必要
所做的设定之外,在做环境
设定时常用到的指令尚有
:
1. stty
设定对输入(input)的界说
与怎样
做输出,这个指令的叁数极为浩繁
,我们可用
stty -a
看到全部
的叁数及其设定,在这些叁数中,常用的有:
istrip (-istrip)
将全部
的输入截取成7 bits的原料
,然而中文的原料
都是8 bits的,以是
当必要
应用
中文时,请加上'-istrip'这个叁数,以停止输入的原料
被粉碎
。
cs7 cs8
设定每一字元的原料
都是7 bits或8 bits的原料
, 因此在必要
应用
中文时,通常会有如下的设定:
stty -istrip cs8
iuclc (-iuclc)
将标准
输入的大写字母视为小写(或取缔
)。
olcuc (-olcuc)
将小写的字母以大写型态输出(或取缔
)。
echo (-echo)
将全部
的输入由标准
输出处输出(或取缔
输出,即在萤幕上看不到本身
的输入)。
stty除了这些叁数外,还可以用来界说
某一个键的特定功能,如:
stty erase "^H"
stty kill "^U"
2. mesg y (mesg n)
若在事变
时不渴望
被talk等讯息所打搅
,可下'mesg n' 指令,以停止外来迅息间断
正要举办的事变
('mesg y'则是规复
与外界的雷同
)。
3. umask [nnn]
设定新增文件或目次
的属性(mode),新文件或新目次
的mode为体系
管理
者以create所设定的属性减去nnn,如体系
管理
者所设定的文件权力
状况
是777,而用户又自行设定了umask 022 则这个用户在他小我私家
帐号下的每一个新发生
的文件的权力
状况
都将会是755(777-022)。
4. Function 与 Alias
对於连续
串或某一指令,我们可以用function的行动
(在sh、ksh、bash中)或alias指令(在csh、tcsh、ksh、bash 中),用一简短字串来代替
这一个或连续
串的指令,function的用法如:
vi(){
mesg n
/usr/ucb/vi $*
mesg y
}
此中
,'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系列
[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的收场
而使文件中指令的效果消失。
阅读(448) | 评论(0) | 转发(0) |