对话 UNIX,第 13 部分: 另外十种命令行组合

本文是“对话 Unix系列文章中的第 13 部分:我以前认为 13 是个不吉利的数字,直到我浏览 Internet 搜寻这个数字之所以不吉利的原因 。实际上,13 这个数字可以说是喜忧参半(请参见参考资料) 。
好的方面:13 是元素铝的原子序数,而铝可用于制作各种祭神仪式的奠酒容器;篮球职业运动员 Wilt Chamberlain 身着 13 号球衣(我们都知道,Wilt 是非常幸运的);按照某种禁忌转换方式,13 是第 7 个质数,而数字 7 象征着幸运 。
不好的方面:绞刑架有 13 级台阶;制造混乱的神“洛基和犹大,都是第 13 个到达的;并且无论您怎么对其划分(除以 2、3、4、或者6),在餐馆中 13 个人都很难坐,这可能正是洛基和犹大被认为是局外人的原因 。
陪审团最多不超过 13 个人 。所以,除非您在 13 号星期五阅读本文,并且在位于 Mockingbird Lane(这是个历史悠久的地方)1313 号的办公楼的第 13 层,否则都是值得庆幸的 。“对话 UNIX现在是个长满青春痘的青少年了 。本文将介绍十种命令行组合和 Shell 诀窍,以庆祝本系列文章进入青春期 。恭喜您!
临时设置一个环境变量
环境变量,如 EDITOR 和 TZ,可能影响命令执行的结果 。(前者选择进行文本编辑时所启动的程序;而后者可以指定您的时区 。)通常,您可以在 Shell 启动文件中设置环境变量,以便对所有的 Shell 会话产生作用,并且您可以在任何时候使用像 export TZ=GMT 这样的命令为一个 Shell 会话更改环境变量的值 。
此外,您可以为单个命令临时地修改一个环境变量的值 。只需要在启动命令行的时候设置环境变量以及您希望运行的命令即可 。例如,要为单个命令更改您的首选编辑器,可以在它的前面加上 EDITOR=editor,如下所示:
$ printenv
...
EDITOR=vi
...
$ EDITOR="pico" less bigfile
这个组合可以使用 less 对 bigfile 进行分页 。如果您在 less 中输入 v 以编辑文件,那么将启动 pico 而不是 vi 。下面是另一个实际的使用情况:
$ date
Sun Aug 5 16:14:17 EDT 2007
$ TZ="Japan" date
Mon Aug 6 05:14:06 JST 2007
对 TZ 进行的临时更改将影响 date 的即时实例解释系统当前日期和时间的方式 。
查看您实际正在运行的命令
大量的 Shell 特性可以影响到如何解释您所输入的命令名 。每种 Shell 都有一个内置命令的分类;PATH 环境变量用于指定搜索的列表和目录;而别名可以作为简写 。要运行一个程序可以使用许多方法,如何了解实际执行的是什么命令呢?使用 Shell 内置的 type 命令可以揭示实际的情况 。
假设您拥有下面的这些 Shell 设置:
PATH=/bin:/usr/bin:/usr/local/bin
alias vi=pico
您可以在 /usr/bin 和 /usr/local/bin 中找到 Perl 的副本 。要查明您正使用的是哪个 Perl,可以输入 type perl 。
$ perl -v
This is perl, v5.8.7 built for darwin-2level
$ type perl
perl is /use/local/bin/perl
$ type -a perl
perl is /usr/local/bin/perl
perl is /usr/bin/perl
$ type -a -w perl
perl: command
perl: command
type perl 命令显示了如何在命令行中对 perl 命令进行解释 。在这个示例中,/usr/local/bin/perl 是实际的扩展结果 。type -a 命令显示了 Shell 所知道的所有 Perl 实例,这在很大程度上依赖于 PATH 变量 。
可以针对您常用的其他命令使用 type:
$ type -a vi
vi is an alias for pico
vi is /usr/bin/vi
$ type -a cd
cd is a shell builtin
cd is /usr/bin/cd
type 命令显示出,vi 实际上是 pico 的别名 。type 命令还显示出,cd 是一个内置的命令,并且与外部命令 /usr/bin/cd 是相同的 。

推荐阅读