表4-3列出了一些常用的Bash内置变量。
表4-3 常用的Bash内置变量
(续)
下面举例说明表4-3中的一部分内置变量的含义与使用。
例如,查看内置变量BASH和BASH_VERSION的值:
查看当前shell的启动时间,即shell窗口从打开到现在已经过去秒数:
下面的例子用来说明内置变量CDPATH的作用。建立目录A,B和C,并保证子目录C的父目录是/tmp/A/B:
在/home/user目录下,第一次运行cdC是失败的,因为在/home/user目录下没有子目录C:
第二次运行cdC之前,定义了内置变量CDPATH,将目录/tmp/A/B加入cd命令的搜索路径CDPATH:
这时运行cdC时,系统会在内置变量CDPATH包含的路径中查找,并在/tmp/A/B目录下发现C目录。所以在/home/user目录下直接运行cdC,就可以进入/tmp/A/B/C目录,而不需要运行cd/tmp/A/B/C,即不需要输入全路径:
再用pwd命令确认一下,确实进入了/tmp/A/B/C目录:
内置命令history可以列出历史命令,内置变量HISTFILE(history file的意思)用来指定存放历史命令的文件,通常HISTFILE=~/.bash_history。在用户退出shell时,历史命令会存放在主目录下面的.bash_history文件中。
内置变量HISTIGNORE(history ignore的意思)用来指定不希望被记录在历史命令列表中的命令或者命令序列,多个命令用冒号隔开。例如,设置HISTIGNORE=ls:t*:\&,那么命令ls和以t开头的指令不会被记录在历史命令列表中,&表示上一条命令,&可以使得连续输入的相同的命令只被记录一次,避免重复记录。因为在命令行&表示将命令放在后台,所以在&的前面加反斜杠屏蔽其特殊含义。下面看具体的例子。history命令的选项-c用来清空(clear)历史命令列表。为便于看清例子,先清空历史命令列表:
设置在命令的历史记录中将被忽略的命令序列:(www.xing528.com)
下面分别运行date,ls,pwd(重复三次),touch命令:
现在,运行history命令,得到的历史命令列表不包含ls和touch,并且pwd只出现一次。因为HISTIGNORE包含ls和t*,所以ls和touch不被记录在历史命令列表中;因为HISTIGNORE包含&,当刚刚运行完第二个和第三个pwd命令时,系统发现其与上一条命令完全相同,所以系统不将其记录,只记录第一个pwd:
内置环境变量HOME记录着用户的主目录。账户user默认的主目录为/home/user,运行cd或者cd~就进入用户的主目录。一般地,HOME的值无需改动,也最好不要改动。如果改变HOME的值,将影响使用它的命令和脚本的行为,至少影响命令cd和cd~的运行结果。见下例:
内置环境变量PWD的值是当前的工作目录,echo$PWD等价于命令pwd,例如:
假设在/home/user目录里面有一个脚本current_directory.sh,它的第一条命令显示当前的工作目录,接下来的两条命令创建目录/tmp/maggie/bin并进入其中,最后一条命令显示执行cd/tmp/maggie/bin之后的工作目录:
执行脚本current_directory.sh:
现在出现一个问题,脚本current_directory.sh运行完成了,那么当前的工作目录是运行脚本之前的目录/home/user呢,还是脚本的最后一条命令所显示的目录/tmp/maggie/bin呢?试试就知道了:
可见,当前的工作目录是运行脚本之前的工作目录。这说明,脚本运行时所在的子shell的工作目录的改变不影响父shell的工作目录(其实在3.11.8节已经讲过:子shell中的路径变化不影响父shell)。如果用source运行脚本,则脚本就在当前shell(而不是在一个子shell)运行,那么当前shell的工作目录会发生改变:
内置环境变量OLDPWD记录的是前一次的工作目录,命令cd-的作用是回到上一次的工作目录,与cd$OLDPWD作用一致。见下例:
内置环境变量TMOUT默认是没有值的。若该变量的值大于0,则在等待TMOUT秒后还没有任何输入时,当前的shell就会自动退出。例如,设置它为20:
那么在20s之内,没有任何键盘输入的话,当前shellterminal将自动关闭。
以上列举了表4-3中的部分内置变量,还有很多其他的内置变量,这里不一一讲解。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。