捐赠?

Harley Hahn
个人主页

给 Harley
发送留言


来自 Harley Hahn 的
个人寄语

Unix 之书
主页

搜索

章节列表

目录

插图列表

各章...
   1   2   3
   4   5   6
   7   8   9
  10  11  12
  13  14  15
  16  17  18
  19  20  21
  22  23  24
  25  26

术语表

各附录...
  A  B  C
  D  E  F
  G  H

命令
摘要...

• 按字母顺序
• 按类别

Unix-Linux
年表

互联网
资源

错误与
勘误

推荐语


教师
与学生
资料...

主页
与概述

练习
与答案

Unix 模范
课程与
课程大纲

教师用
PowerPoint 文件

附录 G...

Shell 选项与 Shell 变量 (Shell Options & Shell Variables)

每种 Shell 都提供了许多方式,让你可以 控制它的行为。Bourne Shell 家族(Bash、 Korn Shell)使用 Shell 选项;而 C-Shell 家族(Tcsh、C-Shell) 则同时使用 Shell 选项和 Shell 变量。 本附录对这些选项和变量进行了汇总。

关于 Shell 选项和 Shell 变量的详细 讨论,请参见第 12 章。

Bourne Shell 家族
(Bourne Shell Family)

Bourne Shell 家族使用大量选项来 控制 Shell 的行为。尤其是,交互式 Shell 所需的选项与非交互式 Shell 不同。(事实上,这正是它们成为 交互式 Shell 的原因。)

指定这类选项有两种方式。第一, 按标准方式调用:在启动 Shell 时于 命令行上指定选项。自动运行的 非交互式 Shell 属于这种情况,你自己 通过输入命令启动的交互式 Shell 也是 这种情况。例如:

bash -vx

(顺带一提,当你要测试或调试 Shell 脚本时,这两个选项格外有用。)

在交互式 Shell 内部 — 也就是在 Shell 提示符下 — 你可以随时打开 或关闭选项。要设置(打开)某个选项, 使用 set ‑o 命令。要取消 (关闭)某个选项,使用 set  +o 命令。使用这些命令时,你要给出 选项的长名称,而不是它的缩写。 例如:

set -o verbose
set +o xtrace

要显示所有选项的当前状态,单独 使用其中任意一个命令即可:

set -o
set +o

-o 这种形式会打印便于人阅读的 输出;+o 则打印适合脚本使用的 输出。(不妨试一试。)

总而言之,Bourne Shell 家族使用的 Shell 选项非常多。大多数情况下, 你并不需要改动它们,因为默认值就 已经很好用。不过作为参考,图 G-1 中的表格汇总了 Bash 和 Korn Shell 的 Shell 选项。并非所有选项在所有 Shell 中都可用,所以一定要看最左边 那一列,它显示了每个选项分别被 哪些 Shell 支持。

— 提示 —

在 Bash 中,还有一些额外的选项可以 用来控制各种特性。要设置和取消这些 选项,你使用 shopt("shell options") 命令。这些 shopt 选项极为冷僻, 你多半用不到。不过,如果你有空想 看一看,请参阅 shopt 的 man 手册页。

如果你有空想看一下这些选项, 了解 shopt 选项最好的地方是 Bash 的 man 手册页。要找到相关讨论, 可以搜索 "shopt"。

图 G-1:  Bourne Shell 家族:Shell 选项(Figure G-1: Bourne Shell family: Shell options)

这张表汇总了 Bourne 家族 Shell 中 重要的 Shell 选项。最左边一列显示 各个选项被哪些 Shell 支持:B = Bash; K = Korn Shell。圆点表示某个 Shell 不支持该选项。请注意,有些选项 (例如 bgnice)只有长名称,而没有 短选项名。要了解更多信息,请参阅 你所用 Shell 的 man 手册页。

说明:(1) Bash 虽然支持 emacsvi 选项,但并不使用 -E-V。(2) Korn Shell 使用 -h-t,但不支持长名称 hashallonecmd

Shell 选项 长名称 含义
B K -aallexport导出此后定义的所有变量和函数
• K bgnice以较低的优先级运行后台作业
B •-Bbraceexpand大括号扩展:启用
B K -c从字符串参数读取命令
B K -Eemacs命令行编辑器:Emacs 模式;关闭 vi 模式
B K -eerrexit若命令执行失败,则中止并退出脚本
B K -hhashall找到命令时就散列(记住)命令的位置
B •-Hhistexpand命令历史:启用 ! 风格的历史替换
B • history命令历史:启用
B K -Iignoreeof忽略 eof 信号 ^D;用 exit 退出 Shell(见第 7 章)
B K -kkeyword将所有关键词参数放入环境中
• K markdirs通配文件名时,在目录名后追加 /
B K -mmonitor作业控制:启用
B K -Cnoclobber不允许重定向的输出替换文件
B K -nnoexec调试:读取命令、检查语法,但不执行
B K -fnoglob通配文件名(文件名扩展):禁用
• K nolog不把函数定义保存到历史文件中
B K -bnotify作业控制:后台作业一结束就立即通知
B K -unounset把使用未设置的变量当作错误
B K -tonecmd读取并执行一条命令,然后退出
B • posix遵循 POSIX 标准
B •-pprivileged以特权模式运行脚本或启动 Shell
B •-r以受限模式启动 Shell
• K-s对位置参数排序
• K trackall别名:把命令替换为完整的路径名
B K -vverbose调试:把每条命令回显到 stderr(标准错误)
B K -Vvi命令行编辑器:vi 模式;关闭 Emacs 模式
• K virawvi 模式中:每键入一个字符就处理该字符
B K -xxtrace调试:命令执行时回显到 stderr(也就是跟踪)
Shell 选项 长名称 含义

跳至页首

C-Shell 家族
(C-Shell Family)

C-Shell 家族同样使用选项来 控制 Shell 的行为。这些选项汇总在 图 G-2 中。如果你把图 G-2 中的选项 与图 G-1 中的选项比较一下,就会发现 大多数 C-Shell 选项也被 Bourne Shell 家族使用。不过,两者之间有一个 重要区别。

在 Bourne Shell 家族中,Shell 的行为 完全由选项控制,而选项有三种类型: 常规的命令行选项(例如 -v)、 与 set  +o 命令一起使用的 "长名称"选项,以及只能与 Bash 的 shopt 命令一起使用的大量额外选项。

尽管 C-Shell 家族确实使用了少量 命令行选项(图 G-2),但在很大程度上, Shell 的行为是由 Shell 变量控制的。 这正是 C-Shell 家族与 Bourne Shell 家族之间的重要区别之一, 第 12 章对此有详细解释。作为参考, 图 G-3 汇总了 C-Shell 和 Tcsh 使用的 Shell 变量。

图 G-2:  C-Shell 家族:Shell 选项(Figure G-2: C-Shell family: Shell options)

这张表汇总了 C-Shell 家族中 重要的 Shell 选项。最左边一列显示 各个选项被哪些 Shell 支持:C = C-Shell; T = Tcsh。圆点表示某个 Shell 不支持 该选项。要了解更多信息,请参阅 你所用 Shell 的 man 手册页。

说明:-v-V 选项是通过设置 verbose 这个 Shell 变量来起作用的。 -x-X 选项是通过设置 echo 这个 Shell 变量来起作用的。

Shell 选项 Shell 变量 含义
C T-c从字符串参数读取命令;与 -s 比较
• T-d.cshdirs 文件载入目录栈
C T-e若命令执行失败,则中止并退出脚本
C T-i交互模式(影响提示符、错误处理等)
C T-n调试:读取命令、检查语法,但不执行
C T-s从 stdin(标准输入)读取命令;与 -c 比较
C T-t读取并执行一条命令,然后退出
C T-vverbose调试:回显每条命令,仅在历史替换之后
C T-Vverbose调试:在读取 .tcshc/.cshrc 文件之前设置 verbose
C T-xecho调试:回显每条命令,在所有替换之后
C T-Xecho调试:在读取 .tcshc/.cshrc 文件之前设置 echo

图 G-3:  C-Shell 家族:Shell 变量(Figure G-3: C-Shell family: Shell variables)

这张表汇总了 C-Shell 家族中用来 控制 Shell 行为的重要 Shell 变量。 最左边一列显示各个选项被哪些 Shell 支持:C = C-Shell; T = Tcsh。圆点表示某个 Shell 不支持该选项。

要了解更多信息,请参阅你的 Shell 的 man 手册页。要了解有关 自动补全、拼写纠正或命令行编辑的 信息,请参阅 Tcsh 的 man 手册页。 关于 Shell 变量的详细讨论,请参见 第 12 章。

Shell Shell 变量 含义
• Taddsuffix自动补全:在目录名后追加 /(斜杠)
• Tampm以 12 小时制的 AM/PM 格式显示时间
• Tautocorrect拼写纠正:在尝试补全之前先调用拼写单词编辑器
• Tautoexpand自动补全:在尝试补全之前先调用 expand-history 编辑器
• Tautolist自动补全:补全失败时,列出其余候选项
• Tautologout如果你没有键入命令,自动登出前的时间(以分钟计)
C Tcdpathcdchdirpopd 要搜索的目录
• Tcolorls-F 命令使用颜色
• Tcomplete自动补全:igncase=忽略大小写;enhance=把 . - _ 也当作分隔符
• Tcorrect拼写纠正:cmd=命令;all=整行;complete=改为执行补全
C Tcwd你当前的工作目录(与 owd 比较)
C Techo调试:回显每条命令,在所有替换之后
• Techo_styleecho 命令:bsd(支持 -n);sysv(支持 \ 转义);both;none
• Tedit命令行编辑器:启用
C Tfignore自动补全:要忽略的后缀
C •filec自动补全:启用(在 Tcsh 中始终开启)
• Tgroup当前的 groupid(组 ID)
C Thardpaths目录栈:解析路径名,使其不含符号链接
C Thistory命令历史:历史列表中的行数
C Thome你的主目录
C Tignoreeof收到 eof 信号(^D)时不退出 Shell
• Timplicitcd单独键入一个目录名,就意味着切换到该目录
• Tinputmode命令行编辑器:在行首设置初始模式,insertoverwrite
• Tlistjobs作业控制:每当有作业被挂起时列出所有作业;long = 长格式
• Tloginsh设置此变量用以表明这是一个登录 Shell
C Tmail要检查是否有新邮件的文件列表
• Tmatchbeep自动补全:发出提示音;ambiguousnotuniquenevernomatch
C Tnobeep自动补全:从不发出声音
C Tnoclobber不允许重定向的输出替换文件
C Tnoglob通配文件名(文件名扩展):禁用
C Tnotify作业控制:后台作业一结束就立即通知
• Towd你最近一次[原先]的工作目录(与 cwd 比较)
C Tpath搜索程序时要查找的目录
C Tprompt你的 Shell 提示符(修改这个变量即可自定义)
• Tpushdsilent目录栈:pushdpopd 不列出目录栈
• Tpushdtohome目录栈:不带参数的 pushd 默认使用主目录(如同 cd)
• Trecexact自动补全:即使可能存在更长的匹配,也优先匹配完全相同的那一项
• Trmstar执行 rm *(删除所有文件)之前强制用户确认
• Trprompt显示提示符时,打印在屏幕右侧的字符串(提示:设为 %/)
• Tsavedirs目录栈:登出之前保存目录栈
C Tsavehist命令历史:登出之前把指定数目的行保存到历史列表中
C Tshell你的登录 Shell 的路径名
C Tterm你所使用的终端类型
C Tuser当前的 userid(用户 ID)
C Tverbose调试:回显每条命令,仅在历史替换之后
• Tvisiblebell使用屏幕闪动代替可听见的声音
Shell Shell 变量 含义

跳至页首