Bash 几个环境变量的妙用

由 徐永久 发表于 2002年01月22日 21:16。

Bash 是 GNU/Linux 默认的 Shell 。和 Bourne shell (sh) 兼容,而且采取了 Korn shell (ksh) 和 C shell (csh) 的特色,符合 IEEE POSIX P1003.2/ISO 9945.2 Shell and Tools 标准。本文介绍的是几个环境变量,能给您的日常操作带来的便捷。


* $CDPATH 这个变量的作用和 PATH 类似,但是不是用在命令搜索上,而是用在 cd 命令的路径搜索上,例如:

$ export CDPATH=.:~:~/docs:~/src:~/src/ops/docs:/mnt:/usr/src/redhat:/usr/src/redhat/RPMS:/usr/src:/usr/lib:/usr/local:/software:/software/redhat

我们如果用 cd i386 命令,就可以进入 /usr/src/redhat/RPMS/i386 目录。

* $HISTIGNORE 这个变量用于避免重复的命令以及没有用的命令进入命令历史表,免去了很多次按向上的箭头键寻找上一个不同命令的麻烦,例如:

$ export HISTIGNORE=”&:ls:ls *:mutt:[bf]g:exit”

这个例子会剔除 ls 和 mutt 和 bg/fg 等命令不进入命令历史表。

* $TMOUT 这个命令能让你在多少秒之内退出当前的 bash 环境,如果这段时间内一直没有接收到输入。这在那些粗心的 root 用户忘记退出时十分有用。

另外 set ignoreeof 能屏蔽 Ctrl-D 的退出功能。

shopt cmdhist 能让多行命令在命令历史中成为一行。

shopt extglob 能在命令行采用扩充的正则表达式:

?(pattern-list) 匹配零个或一个模式。
*(pattern-list) 匹配零个或多个模式。
+(pattern-list) 匹配一个或多个模式。
@(pattern-list) 确切匹配模式。
!(pattern-list) 匹配除指定模式以外的任何字符。

例如:ls -lad !(*.p?(df|s)) 将列出 当前目录下非 pdf 和 ps 文件。

在 /etc/inputrc 或 ~/.inputrc 中加入:

set show-all-if-ambiguous on

只要按一次 Tab 就可以列出可以运行的命令。

同样的文件中加入

set visible-stats on

就可以列出所有文件的状态,就像 ls -F 一样。