4.9. Shells
上一页 | 第 4 章 UNIX 基础 | 下一页

## 4.9. Shells

在FreeBSD里，每日有一大堆工作是在命令行的界面完成的,那就叫做shell。 一个shell的主要功能就是从输入取得命令然后去执行他。 许多的shell同样能帮我们完成内建的每日功能，例如:文件管理、文件寻找、命令行编辑、 宏指令和环境变量。FreeBSD内含了一些shell，例如:`sh`、Bourne Shell、 `tcsh`和改良过的C-shell。 另外也有些shell也可在FreeBSD的Ports得到，例如:`zsh`和`bash`。

您想使用哪一种shell取决于您的喜好， 假如您是C程序设计师，您可能选择一个C-like shell例如`tcsh`。 假如您是从Linux过来的或是一个命令行的新手，您可能会试一下`bash`。 这一点告诉我们每一个shell都有各自的特性，可能适用于您的工作环境，也可能不适用于您的工作环境。

每个shell都有一个共通点就是文件名补全。 输入命令或文件名的前几个字，然后按Tab键，就能靠shell的自动补全功能得出 命令或文件名。这里有一个例子，假设您有两个文件叫 `foobar` 和`foo.bar`，而您想删除 `foo.bar`， 可这样在键盘上输入 `rm fo[Tab].[Tab]`。

那么shell就会输出 `rm foo[BEEP].bar`。

这个[BEEP] 是这控制台铃声， 那个是告诉我们它不能完成文件名补全，因为有多个文件名符合。 `foobar` 和 `foo.bar` 都是以 `fo`开头， 它只可以补全到 `foo`。 输入 `.`并再按一次 Tab，shell才把其余的文件名全部显示出来。

另一个特点就是shell利用环境变量运行。环境变量是贮存在shell环境空间上相对应的键和可变值， 这个空间能够补程序从shell里读出，而且包含了许多程序的配置。 这个一个常用环境变量列和其含义的列表：

变量 | 说明
--- | ---
`USER` | 当前登录进入的用户名。
`PATH` | 搜索程序路径，以两点的冒号分隔开。
`DISPLAY` | 假如有这个变量的话，就是X11显示器的网络名称。
`SHELL` | 当前所用的shell。
`TERM` | 用户终端的名字，通常用在确定终端的能力。
`TERMCAP` | 各种终端功能所用终端分离编码的基本数据项目。
`OSTYPE` | 操作系统类型，默认是FreeBSD。
`MACHTYPE` | 是指系统上运行的CPU体系结构。
`EDITOR` | 用户首选的文本编辑器。
`PAGER` | 用户首选的文本页面调度程序 。
`MANPATH` | 搜索联机手册路径，以两点的冒号分隔开。

不同的shell设置环境变量也不相同。举个例子， 在如`tcsh` 和 `csh`这样的C-Style shell， 您必须使用`setenv`去设置环境变量。 而在如`sh`和`bash`这样的Bourne shell， 您必须使用`export`去设置当前环境变量。 再举个例子，要去设置或改变`EDITOR`环境变量， 在`csh`或`tcsh`下将`EDITOR`设为 `/usr/local/bin/emacs`:

`%` `setenv EDITOR /usr/local/bin/emacs`

而在Bourne shell下，则是:

`%` `export EDITOR="/usr/local/bin/emacs"`

您也可以在命令行上加一个`$`字符在变量之前从而取得环境变量。 举个例子，用`echo $TERM` 就会显示出`$TERM`的设定值， 其实就是shell取得`$TERM`并传给`echo`来显示的。

shell里有许多特别的字符代表着特别的资料，我们把叫做meta-characters。 最常用的就是`*`字符，它可代表文件名的任何字符。 这些特别字符应用到文件名全域方面。假如，输入 `echo *`和输入 `ls`的效果是相同的，其实就是 shell 取得了全部符合 `*`的文件名，并传给 `echo` 在命令行下显示出来。

为了防止shell去分析这些特别字符， 我们可在它之前加一个 `\`字符去说明它只是普通字符。 `echo $TERM`就会显示出您的终端情况， 而 `echo \$TERM` 就会显示出 `$TERM` 这几个字。

### 4.9.1. 改变您用的Shell

改变您的Shell的最简单方法是使用 `chsh` 命令。 执行 `chsh` 将根据您设定的`EDITOR` 环境变量进入到那个编辑器，假如没有设定，就会进入`vi`编辑器。 请改变“Shell:”这行对应值。

您可使用`chsh` 的`-s`选项， 这样就能设置您的shell却又不用编辑器。假如您想把shell改为`bash` 可用下面的技巧。

`%` `chsh -s /usr/local/bin/bash`

### 注意:

您使用的shells必须 在`/etc/shells` 文件里列出。 假如您从 ports里装一个shell， 那就不用做这步了。 假如您手工装一个shell，那就要手工添加进去。

举个例了子，假如您手工把 `bash`装到 `/usr/local/bin`里，您还要进行这一步:

`#` `echo "/usr/local/bin/bash" >> /etc/shells`

然后运行`chsh`。

上一页 | 上一级 | 下一页
4.8. 守护进程，信号和杀死进程 | 起始页 | 4.10. 文本编辑器

本文档和其它文档可从这里下载： ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题，请先阅读 文档，如不能解决再联系 <questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.