C shell 由 Bill Joy 所写,它更多的考虑了用户界面的友好性。它支持象命令补齐(command-line completion)等一些 Bourne shell 所不支持的特性。普遍认为C shell 的编程接口做的不如 Bourne shell, 但 C shell 被很多 C 程序员使用因为 C shell的语法和 C语言的很相似,这也是C shell名称的由来。
News/ bin/ games/ mail/ samplefile test/
如果你要进入 test 子目录,你将会输入以下的命令:
cd test
这个命令能够满足你的需要,但 bash还提供了稍微不同的方法来完成同样的事。因为 test 是当前目录里唯一以字母 t开头的子目录,bash在你只输入字母 t后就能判断出你要做什么了:
cd t
在你键入那个字母后,唯一的可能就是 test 。想让 bash 帮你结束命令的话,按下 Tab 键:
cd t<tab>;
当你这样做以后,bash 将帮你补齐命令并显示在屏幕上。但在你按下回车键以前命令并没有被执行,bash 会让你检验补齐的命令是否是你真正需要的。在输入象这样短的命令时你也许看不出它的价值所在,甚至在命令很短时还会简慢输入的速度,但是当你要输入的命令有点长时,你会发现这个特性是多么的美好。
但是当目录里有不止一个以字母 t 开头的文件时会发生什么情况呢?在你使用命令补齐时会有问题,让我们看看下面的情况,当前目录里有下列内容:
News/ bin/ mail/ samplefile test/ tools/ working/
现在这个目录里有两个以字母 t 开头的文件。假设你仍然想进入 test 子目录,如何使用命令补齐呢?如果你象先前那样键入:
cd t<tab>;
bash 将不知道你到底想进入哪个子目录,因为给出的信息并不唯一。如果你这样做了的话,bash 将发出一声蜂鸣提醒你没有足够的信息来补齐你的命令。蜂鸣之后bash 并不改变输入的命令,这将使你能在原来的基础上再输入更多的信息,在这个例子中你仅需再键入一个 e 并再按一下 Tab 键,这时 bash 就有足够的信息来完成你的命令了:
cd test
当你输入命令时不论何时按下 Tab 键,bash 都将尽其所能地试图补齐命令,不行的话会发出蜂鸣来提醒你需要更多的信息。你需要键入更多的字符,并再次按下 Tab 键,重复这个过程直至你期望的命令出现。
通配符
另一个使命令输入变得更简单的方法是在命令中使用通配符。bash 支持三种通配符:
* 匹配任何字符和任何数目的字符
? 匹配任何单字符
[...] 匹配任何包含在括号里的单字符
复制代码
* 通配符的使用有些象命令补齐。例如,假设当前目录包含以下文件:
News/ bin/ games/ mail/ samplefile test/
如果你想进入 test 目录,你将键入 cd test, 或者你想用命令补齐:
cd t<tab>;
现在有第三种方法来做同样的事。因为仅有一个文件以字母 t 开头,你也能用 * 通配符来进入该目录。键入下列命令:
cd t*
* 匹配任何字符和任何数目的字符,所以 shell 将把 t* 替换为 test(当前目录里唯一和通配方案匹配的文件)。当前目录里只有一个文件以字母 t 开头的话这将是可靠的。但是如果当前目录里有不止一个文件以字母 t 开头,shell 将试着进入第一个符合匹配方案的目录,这个目录是以字母表排序的第一个目录,这个目录也许是也许不是你所期望的。
bash 把你先前输入的命令文本保存在一个历史列表中。当你用你的帐号登录后历史列表将根据一个历史文件被初始化。历史文件的文件名被一个叫 HISTFILE 的 bash变量指定。历史文件的缺省名字是 .bash_history。这个文件通常在你的用户目录中。(注意该文件的文件名以一个句号开头,这意味着它是隐含的,仅当你带 -a 或 -A参数的 ls 命令列目录时才可见)
仅将先前的命令存在历史文件里是没有用的,所以 bash 提供了几种方法来调用它们。使用历史记录列表最简单的方法是用上方向键。按下上方向键后最后键入的命令将出现在命令行上。再按一下则倒数第二条命令会出现,以此类推。如果上翻多了的话也可以用向下的方向键来下翻。(和 DOS 实用程序doskey一样)如果需要的话,显示在命令行上的历史命令可以被编辑。
另一个使用命令历史文件的方法是用 bash 的内部命令 history 和 fc(fix 命令)命令来显示和编辑历史命令。history 命令能以两种不同的方法来调用。第一种是:
history [n]
当 history 命令没有参数时,整个历史命令列表的内容将被显示出来。下面是一个命令历史列表的例子:
1 mkdir /usr/games/pool
2 cp XpoolTable-1.2.linux.tar.z /usr/games/pool
3 cd /usr/games/pool/
4 ls
5 gunzip XpoolTable-1.2.linux.tar.z
6 tar -xf XpoolTable-1.2.linux.tar
7 ls
8 cd Xpool
9 ls
10 xinit
11 exit
12 which zip
13 zip
14 more readme
15 vi readme
16 exit
复制代码
使用 n 参数的作用是仅有最后 n 个历史命令会被列出。例如,history 5 显示最后 5 个命令。
调用 history 命令的第二种方法用于修改命令历史列表文件的内容。命令的语法如下: