Intro
shell为用户提供了统一、方便的操纵kernel的交互式接口。shell为每个用户、每次登陆,都需要做一些变量的初始化和自定义的设定。这些变量定义了“环境”(或"上下文")。如果我们希望定制自己的环境,必须好好研究下shell环境的基本组成。
------------------------------------------------------------------------------
PATH
PATH无疑是出镜率最高的变量了。PATH,即系统路径,是一个以冒号分隔的目录列表。
当shell接收到command命令时,并且当command不是关键字、函数、内建命令时,并且command命令不含"/"字符时(含/表示指定目录,跳过path寻找阶段),shell会在当前用户的PATH变量内所列出的目录下,由左至右查找command可执行文件。
因此,这就能解释:
-
为什么当前目录没有who文件,你却可以随时随地调用who命令:who在path的一个目录下;
-
为什么当前目录下有test.sh,但直接键入test.sh系统报command not found:test.sh不在path的任何一个目录下,且当前目录没有在$PATH中;
-
为什么我找不到某些命令,但root却可以:$PATH设置不一样,某些系统root比普通用户的$PATH多/sbin/;
-
$ echo $PATH #work的path
-
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11R6/bin:/usr/share/baidu/bin:/root/bin
-
--------------------------------
-
$ PATH=$PATH:/home/work/opbin/bin #临时增加/home/work/opbin/bin,注意退出终端后path变更失效,若永久加,下文有说明
-
$ export PATH #可忽略,PATH本身就是环境变量
-
--------------------------------
-
$ PATH=$PATH: #一个空项目表示当前目录
------------------------------------------------------------------------------
LANG环境变量
LANG设定了语系和编码。
-
$ echo $LANG #查看所在的语系
-
en_US
-
-------------------------
-
$ locale -a #locale -a命令列出了所支持的所有语系
-
-------------------------
-
$ locale #locale命令列出了当前所在的所有语系变量
-
-
LANG=en_US
-
LC_CTYPE="en_US"
-
LC_NUMERIC="en_US"
-
LC_TIME="en_US"
-
LC_COLLATE="en_US"
-
LC_MONETARY="en_US"
-
LC_MESSAGES="en_US"
-
LC_PAPER="en_US"
-
LC_NAME="en_US"
-
LC_ADDRESS="en_US"
-
LC_TELEPHONE="en_US"
-
LC_MEASUREMENT="en_US"
-
LC_IDENTIFICATION="en_US"
-
LC_ALL=
其中,LC_ALL是覆盖其他LC_XXX变量的值,LANG是未设置任何LC_XXX变量值所使用的默认值。
一般来说,想改变环境的语系用LANG会比较理想。
-
$ LANG=C #改变LANG到传统C环境L
-
$ locale
-
LANG=C
-
LC_CTYPE="C"
-
LC_NUMERIC="C"
-
LC_TIME="C"
-
...
------------------------------------------------------------------------------
export命令
使一个普通变量变为环境变量,这样fork出的子shell能够取用。
examples:
$var="new"
$bash #进入子shell
$echo $var #无回显
$exit #回到父shell
$export var #变成环境变量
$bash #再次fork
$echo $var #回显var变量
打印当前环境变量关联数组。
$export -p
------------------------------------------------------------------------------
readonly命令
examples:
$var=a #赋值
$readonly a #让a变成只读变量
$a=b #报错
打印当前只读变量关联数组。
$readonly -p
技巧
阅读(1145) | 评论(0) | 转发(0) |