Linux Bash Shell学习(六):设置环境参数

续Linux Bash学习(五):特殊文件、别名、选项和参数

 

  本文也即《Learning the bash Shell》3rd Edition的第三章Customizing Your Environment之读书笔记二,但我们将不限于此。设置一个好的用户环境,对我们开发是非常关键的。在这一章节中,从四个方面进行介绍:特别的文件,别名,选项,参数。上回学习到参数设定的部分。继续……

参数设定

命令查找路径

  PATH存储命令查找文件,可以用echo $PATH来查看。命令都是执行文件,它所在的目录如果不在PATH内,在执行的时候必须指出文件所在目录。PATH里面可包含多个文件目录,之间用“:”来分割,例如/bin:/usr/bin:/usr/local/bin:/usr/X386/bin 。它们是由先后顺序的,我们敲入一个命令,将按顺序进行查找,直至找到。

  有一些命令是已经编译在Linux中的,例如cd,echo,这些命令不是通过文件执行的命令。我们有时需要增加这些路径,例如我们将一些执行文件放入~/bin中,我们希望登录的时候能够直接运行,而不需要指出路径。我们在.bash_profile文件的最后加入PATH=$PATH:/home/wei/bin ,请注意这里的顺序,为了避免我们自己目录下的命令干扰系统命令(同时也可能引起系统安全隐患),我们一般都将新增的路径放置最后。如果发生冲突,而我们希望使用放置在后面目录的命令,在执行是需要执行路径,例如在~/bin/more,这个命令和系统命令冲突,在执行时使用$~/bin/more

命令hashing

  为了提高在PATH路径中查询命令的速度,Linux采用了命令hashing的方式。当shell在PATH中找到一个命令时,将这个命令放入哈希表。当再次使用命令时,将先在哈希表中进行查询,可以用hash 命令来查看当前的哈希表,里面不仅包括命令的完整路径,还包括在本次login中使用的次数。可以用hash -r 来清除整个哈希表,用-d 来删除某个命令,用-p 来加入某个命令(即使这个命令不存在)。在环境中可以通过hashall 的set来设置on或者off,但是我们没有必要去修改它。

目录查询路径

  在cd命令的使用,如果非绝对路径,会在当前路径开始查询,可以设置CDPATH来制定cd命令的查询路径。格式和PATH类似,使用“:”作为分割,并具有前后先后顺序。例如我们设置CDPATH=:~/mybook ,注意不允许路径以”/”开头,也不允许以”./“”../“开头。在上面例子中,我们敲入cd doc,现在当前目录查找,如果没有则接着在~/mybook下查找doc目录。一般来讲,如果有一个目录我们清楚去,我们通常将这个目录设置为某个变量,例如 mydir=~/myproject/mylearning/,然后通过cd mydir来进入,而不采用CDPATH的方式。

其他参数

  除了前面介绍的参数外,还有很多其他的参数,下面一些比较常见。

HOME :用户home目录
SECONDS :shell被invoke的时间间隔。
BASH :当前使用的bash的路径
BASH_VERSION :shell的版本,例如我使用的cygwin的版本是3.2.49(22)-release
BASH_VERSINFO :当前使用shell的主版本信息。例如我的版本是3
PWD :当前路径
OLDPWD :上次cd前的路径。

  这几个参数用于获取数值,没有案例用于设置。

用户环境

变量

  之前所讲的参数其实也是环境变量,例如HOME,MAIL,PATH,PWD。如果将某个变量定义为环境变量,先是定义,然后export var_names ,可以有多个变量的名字,可以与之前的赋值合一,放置为:export var_name = value

有时候我们子希望某个变量值只在某个子进程中起作用,可以使用var_name= value command 的方式。通常变量的定义可以在命令的任何部分,而不只限于开头。

  有一些不是build-in的变量,但是在使用的过程中已经约定俗成,具有特定的含义。包括下面:

  1. BASH:显示当前shell的路径,例如/usr/bin/bash
  2. COLUMNS:显示的列数
  3. EDITOR:text editor的路径
  4. LINES:显示的行数
  5. SHELL:显示login时所使用的shell的路径,例如/bin/bash,和BASH一般来讲是一样的。
  6. TERM:当前teminal的类型,例如cygwin

  这些有些已经成为我们的环境变量,有些是在/etc/profile设定的全局变量,我们也可以在.bash_profile中定义我们自己的。

在Linux中有个专门记录用户环境变量的文件~/.bashrc,如果我们需要使用这个文件,需要在.bash_profile中加入source .bashrc ,以保证在login的时候这些环境起效果。我们也可以在.bash_profile中设置,但是一般建议是将OPTIONS和alias放置在.bashrc中,而如果是少量的定义放置在.bash_profile,如果是大量变量的定义考虑放置在.bashrc中。

文件的修订

  当我们修改.bash_profile,.bashrc当然可以使用vi等editor的方式,但是我们也可以简单实用echo,将所需要的设置附加在文件的最后,例如我们要设置PS1="/u /!—> ",我们需要将其加在.bash_profile的最后,使用

$ echo 'PS1="/u /!--> " ' >> ~/.bash_profile

  注意这里使用了单引号,这是为了避免里面有$或者”或者其他所带来的意义的变化。>>表示附加在文件的最后,而>表示则覆盖整个文件。

相关链接: 我的Linux操作相关文章

你可能感兴趣的:(Linux,读书笔记)