《UNX编程艺术》之命令行选项的常见约定

NOTE:

        本文摘《UNIX 编程艺术》第十章。

命令行选项:

        有三种约定可以区分命令行选项和普通的参数:原始的 Unix 风格、GNU 风格和 X toolkit 风格。

        在原始的 Unix 传统中,命令行选项以连字符 “-” 开头的单个字符。后面不带参数的模式标志选项可以组合在一起使用:例如,如果-a 和-b 是模式选项,-ab 或-ba 都正确而且启用了两个选项。如果选项有参数的话,这些参数紧接着选项后面(是否以空白分隔可选)。这种风格的选项偏爱小写字符而不是大写字符。如果使用大写字符,把它们作为小写字符的选项的特殊变种是一种很好的做法。

        GNU风格使用前面有两个连字符的选项关键字(而不是关键字母)。GNU风格的选项不用空白分隔就不能组合使用。选项参数既可以用空白分隔也可以用单个“=”来分隔。

        X toolkit 风格使用了单连字符和关键字选项并由X toolkit进行解析。它先过滤并处理某些选项(如-geometry 和-display)然后再把过滤后的命令行传递给应用程序逻辑进行解析。这种风格既不能和古典的 Unix 风格又不能和 GNU 风格很好地兼容,所以不应该在新程序中使用,除非遵循老式的 X 约定看起来价值很高。

        以下给出了一些选项及其含义。

        -a

        所有项(all)(不带参数)。如果是 GNU 风格,则为 --all 选项。示例: fuser(1) 和 fetchmail(1) 。
        添加(append),同在tar(1)中一样。这个命令选项和表示删除的-d 选项是一对儿。

        -b

        缓冲区(buffer)大小或块(block)大小(带参数)。设置一个临界缓冲区大小,或(在和存档或处理存储介质有关的程序中)设置块大小。示例:du(1)、df(1)和tar(1) 。
批处理(batch)。如果程序是自然交互的,-b 选项可以用于禁止提示或设置有其他适当选项来接收文件输入而不是操作员的操作。 如flex(1)。 

        -c

        命令(带参数)。如果程序是一个通常从标准输入接收命令的解析器,那么程序期望-c 参数选项会作为单行输入传递给该程序。这个约定在shell 和类似 shell 的解析器中特别强烈。 示例:sh(1)、ash(1)、bsh(1)、ksh(1)和 python(1) 。
        检查(check)(不带参数)。检查命令的文件参数是否正确,但并不真正执行正常的命令过程。命令文件的解释程序频繁用此作为语法检查选项。 示例:getty(1)和 perl(1) 。

        -d

        调试(debug)(带或不带参数)。设置调试信息级别。
        -d 偶尔具有”删除(delete)“或”目录(directory)“的含义。

        -D

        定义(define)(带参数)。在解释器、编译器或(特别是)类似宏处理器的应用程序中给某个符号赋值。C 编译器的宏预处理器对-D 的用法就是如此。

        -e

        执行(execute)(带参数)。包装器程序或可作为包装器使用的程序通常允许-e 对齐交付给控制权的程序进行设置。示例:xterm(1)和 perl(1)。
        编辑(edit)。能以只读模式或编辑模式打开某项资源的程序通常用-e 规定以编辑模式打开资源。示例:crontab(1)和SCCS版本控制系统的 get(1)实用程序。
        -e偶尔具有”排除(exclude)"或“表达(expression)"的含义。

        -f

        文件(file)(带参数)。经常带参数使用,为需要随机访问输入或输出的程序指定输入文件(或者输出文件,但这种使用不太多)。经典的例子是tar(1)。这个选项也用于表明通常从命令行获取的参数值应该从文件中获取:经典的例子可参见 awk(1)和 egrep(1)。比较后面的-o 选项:-f 选项是和-o 选项相对的表示输入的选项。
        强制(force)(典型情况下不带参数)。强制执行通常在某种条件下施行的操作(如文件锁定和解锁)。不是很常见。
        守护进程结合这两种方法使用-f 选项。强制处理(force)非默认位置的配置文件(file)。示例:ssh(1)、httpd(1)。

        -h

        表头(header)(通常不带参数)。启用、禁止或修改程序生成报表的表头。示例:pr(1)和ps(1)。
        帮助(help)。实际上,这没有人们想当然的那样普遍——因为在Unix早期历史的大部分时期,开发者往往把在线帮助视为他们无法承受的存储开销。相反,他们编写了手册页。

        -i

        初始化(initialize)(通常不带参数)。把和程序关联的关键资源或数据库设置成初值或空值。示例:RCS中的ci(1)。
        交互(interactive)(通常不带参数)。强制那些通常不查询确认的程序查询确认。如 rm(1) 和 mv(1),但这种用法并不常见。

        -I

        包含(include)(带参数)。在应用程序将要搜索的资源中增加一个文件或目录名。

        -k

        保留(keep)(不带参数)。禁止某个文件、信息或资源的常规删除操作。参加:passwd(1)、bzip(1)和 fetchmail(1)。
        -k 选项偶尔有“杀死(kill)”的含义。

        -l

        列表(list)(不带参数)。常用于某种目录或档案格式的归档器或解释/播放程序。示例:arc(1)、binhex(1)和nzip(1)。
        在已经是报表生成器的程序中,-l 几乎始终表示“长(long)”,以启用某种长格式来显示比默认模式更多的细节。如 ls(1)和ps(1)。
        加载(load)(带参数)。如果程序是一个链接器或某种语言解析器,-l 在某种意义上始终表示加载一个程序库。参见:gcc(1)、f77(1)和 emacs(1)。
        登录(login)。在 rlogin(1) 和 ssh(1)之类要求网络身份的程序中,-l 表示执行方式。
        -l 偶尔有“长度(length)”或“锁定(lock)”的含义。

        -m

        消息(message)(带参数)。带参数使用的-m 选项用于日志记录或通告,其参数是消息字符串。参见 ci(1)和 cvs(1)。
        -m选项偶尔具有“邮件(mail)”、“模式(mode)”或“修改时间(modification-time)”的含义。

        -n

        数字(number)(带参数)。例如,在head(1)、tail(1)、nroff(1)和 troff(1)程序中使用作页码范围。通常显示DNS名字的某些网络工具用-n 以显示原始 IP 地址。ifconfig(1)和tcpdump(1)是原型实例。
        否(not)(不带参数)。用于禁止 make(1) 等程序的通常行为。

        -o

        输出(output)(带参数)。当程序要求根据命令行的名字指定输出文件名或设备名时,可以交给-o 选项来完成。示例:as(1)、cc(1)和sort(1)。

        -p

        端口(port)(带参数)。特别用于要求指定 TCP/IP 端口号的选项。示例:cvs(1)、smbclient(1)、snmpd(1)和ssh(1)。
        协议(protocol)(带参数)。示例:fetchmail(1)和 snmpnetstat(1)。

        -q

        安静(quiet)(通常不带参数)。禁止正常的结果输出或诊断输出。示例:ci(1)、co(1)和 make(1)。

        -r (also -R)

        递归(recurse)(不带参数)。如果一个程序作用于目录、那么这个选项可告诉程序递归进所有子目录。如cp(1)。
        反向(reverse)(不带参数)。示例:ls(1)和 sort(1)。过滤器可用这个选项反向进行其正常的转换行为。

        -s

        缄默(silent)(不带参数)。禁用正常的诊断输出或结果输出(和-q选项类似;如果两者都支持,-q表示安静而-s 表示绝对缄默)。示例:csplit(1)、ex(1)和 fetchmail(1)。
        主题(subject)(带参数)。这种用法始终用于发送或处理邮件或新闻消息的命令中。示例:mail(1)。
        -s 偶尔具有“大小(size)”的含义。

        -t

        标记(tag)(带参数)。命名一个位置或指定一个字符串供程序作为检索关键字使用。在文本编辑器和浏览器中应用尤多。示例:cvs(1)、ex(1)和vi(1)。

        -u

        用户(user)(带参数)。根据名字或数字UID来指定用户。示例:crontab(1)、emacs(1)、fuser(1)和ps(1)。

        -v

        冗长(verbose)(带或不带参数)。用于启用事务监控性质的、更冗长的列表或调试输出。示例:cat(1)、cp(1)、tar(1)。
        版本(version)(不带参数)。在标准输出上显示程序版本并退出。示例:cvs(1)、chattr(1)、patch(1)和 uucp(1)。更常见的是由-V 调用。

        -V

        版本(version)(不带参数)。在标准输出上显示程序版本并退出(通常也打印编译的配置细节)。示例:gcc(1)、flex(1)和 hostname(1)。

        -w

        宽度(width)(带参数)。特别用于指定输出格式的宽度。示例:faces(1)、grops(1)、od(1)和shar(1)。
        警告(warning)(不带参数)。启用或禁用告警诊断。示例:fetchmail(1)和nsgmls(1)。

        -x

        启用调试(带或不带参数)。同-d选项类似。示例:sh(1)和uucp(1)。
        提取(extract)(带参数)。列出从存储器或工作集待提取的文件清单。示例:tar(1)和 zip(1)。

        -y

        是(yes)(不带参数)。批准启用对程序通常要求确认的潜在破坏行为。示例:fsck(1)和 rz(1)。

        -z

        启用压缩(不带参数)。存档和备份程序经常使用这个选项。示例:bzip(1)、zip(1)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值