3.9.Shell
shell 提供了一个命令行界面,用于与操作系统进行交互。Shell 从输入通道接收命令并执行它们。许多 shell 提供了内置函数来帮助处理日常任务,如文件管理,文件 globbing,命令行编辑,命令宏和环境变量。FreeBSD 自带几种 shell,包括 Bourne shell(sh(1))和扩展的 C shell(tcsh(1))。其他 shell 可以从 FreeBSD Ports 中获取,比如 zsh 和 bash。
shell 的选择实际上是个人口味问题。C 程序员可能会觉得用类似 C 的 shell(如 tcsh(1))更舒适。Linux® 用户可能更喜欢 bash。每个 shell 都有其特性,可能与用户偏好的工作环境相符,也可能不相符,这就是为什么可以对使用哪种 shell 进行选择。
shell 的常见功能是文件名补全。用户输入命令或文件名的前几个字母后按 Tab 键,shell 会自动补全命令或文件名的剩余部分。考虑两个名为 foobar 和 football 的文件。要删除 foobar,用户可输入 rm foo,然后按 Tab 键来补全文件名。
但 shell 只显示 rm foo。它无法完成文件名自动补全,因为 foobar 和 football 都以 foo 开头。有些 shell 会发出哔哔声或显示所有匹配项,如果有多个名称匹配。用户必须继续输入更多字符以确定所需的文件名。输入 t 并再次按 Tab 键足以让 shell 确定期望的文件名并填写其余部分。
shell 的另一个特性是使用环境变量。环境变量是存储在 shell 环境中的变量/键对。这个环境可以被 shell 调用的任何程序读取,因此包含大量程序配置。常见的环境变量提供了常见环境变量及其含义的列表。请注意,环境变量的名称始终大写。
表 6. 常见的环境变量
USER
当前登录用户的名称。
PATH
以冒号分隔的目录列表,用于搜索二进制文件。
DISPLAY
连接到的 Xorg 显示器的网络名称,如果可用。
SHELL
当前的 Shell。
TERM
用户终端类型的名称。用于确定终端的功能。
TERMCAP
执行各种终端功能的终端转义码的数据库条目。
OSTYPE
操作系统的类型。
MACHTYPE
系统的 CPU 架构。
EDITOR
用户首选的文本编辑器。
PAGER
用户首选的逐页查看文本的实用程序。
MANPATH
用于搜索手册页面的目录的冒号分隔列表。
如何在不同 shell 之间设置环境变量不同。在 tcsh(1)和 csh(1)中,使用setenv
来设置环境变量。在 sh(1)和 bash 中,使用export
来设置当前的环境变量。此示例将 tcsh(1) shell 的默认 EDITOR 设置为 /usr/local/bin/emacs :
bash 的等效命令是:
要扩展环境变量以查看其当前设置,请在命令行中其名称前面输入一个 $ 字符。例如,echo $TERM 会显示当前的 $TERM 设置。
shell 将特殊字符(称为元字符)视为数据的特殊表示。最常见的元字符是 *
,它表示文件名中的任意数量字符。元字符可用于执行文件名通配。例如,echo *
等同于 ls,因为 shell 获取所有匹配 *
和 echo 的文件,并将它们列在命令行上。
为防止 shell 解释特殊字符,可以通过在特殊字符前加上反斜杠( \
)来使其脱离 shell。例如,echo $TERM 打印终端设置,而 echo $TERM 字面打印字符串 $TERM。
3.9.1. 更改 Shell
永久修改默认 shell 的最简单方法是使用 chsh。运行此命令将打开配置在 EDITOR 环境变量中的编辑器,默认情况下设置为 vi(1)。将 Shell: 行更改为新 shell 的完整路径。
或者,使用 chsh -s,它将设置指定的 shell 而不会打开编辑器。例如,要将 shell 更改为 bash :
在提示处输入密码并按回车键以修改你的 shell。注销然后重新登录以开始使用新的 shell。
3.9.2。高级 Shell 技术
UNIX® shell 不仅仅是一个命令解释器,它还是一个强大的工具,能让用户执行命令,重定向它们的输出,重定向它们的输入,并链接命令以改善最终的命令输出。当这种功能与内置命令混合在一起时,用户将获得一个可以最大化效率的环境。
shell 重定向是将命令的输出或输入发送到另一个命令或文件的操作。例如,要将 ls(1)命令的输出捕获到一个文件中,请将输出重定向到:
现在将列出目录内容 directory_listing.txt。有些命令可用于读取输入,比如 sort(1)。要对此列表进行排序,请重定向输入:
输入将被排序并显示在屏幕上。要将该输入重定向到另一个文件,可以通过混合方向重定向 sort(1)的输出:
在所有之前的示例中,命令都在使用文件描述符执行重定向。每个 UNIX®系统都有文件描述符,其中包括标准输入(stdin)、标准输出(stdout)和标准错误(stderr)。每个都有一个目的,其中输入可以是键盘和鼠标等提供输入的东西。输出可以是屏幕和打印机上的纸。错误将是用于诊断或错误消息的任何内容。所有三个都被视为基于 I/O 的文件描述符,有时被视为流。
通过使用这些描述符,shell 能通过各种命令传递输出和输入,并将其重定向到文件中。另一种重定向的方法是管道运算符。
UNIX®管道运算符"|"能把将一个命令的输出直接传递或定向到另一个程序。基本上,管道能把一个命令的标准输出作为另一个命令的标准输入,例如:
在该示例中,directory_listing.txt 的内容将被排序,并将输出传递给 less(1)。这能让用户按自己的节奏浏览输出并防止其滚动到屏幕外。
最后更新于
这有帮助吗?