..
命令行程序设计的最佳实践
因为长期使用 linux 系统, 使用大量的 linux 命令。 我发现命令行参数的设计似乎遵循这某些设计哲学。比如,当你使用一个新的命令的时候,如果你不太熟悉某个参数,你可能会这样:
command -h
或者
command --help
或者
command help subcommand
你会使用 -h
或者 --help
查看帮助 , 使用 help
来查看某个子命令的具体用法。当然, 你也可能会使用到 man
man command
绝大部分的命令行程序都遵守着这种契约。还有很多其他的默认设计规范,上面没有介绍到。 这篇文章的目的就是要列出这些不成文的设计哲学, 以便我们自己在编写命令行程序的时候不走弯路,也能顺畅的使用。
设计规范
-
程序返回合适的退出状态号码,执行成功返回0,否则返回对应的错误码,使用者能够参考返回码找到错误原因.
-
永远要支持
--version
和--help
,-h
-
支持长参数的简写,比如支持
--number
的同时支持简写-n
,--number
用于脚本文件中,s-n
用于手动执行命令 -
使用
-
选项来处理标准输入和标准输出. -
对于 bool 类型的参数
-b=true
和-b
应该等价 -
支持多个 bool 类型的参数合并写
-i -t
应该可以合并为-it
-
日志区分错误日志和提示日志,并且分日志级别,错误日志往标准错误输出中输出,其他日志往标准输出中输出
-
有默认参数,并且可以通过命令参数和环境变量来设置对应的值.
-
命令行参数优先于环境变量,环境变量优先于默认值.
具体建议
命令行简写 | 简写说明 |
---|---|
-a | –append 的简写, 表示增加 |
-c | –color的简写,表示演示,–clean的简写,表示清空 |
-d | –deamon 的简写,表示后台运行, –dir 表示目录 |
-e | –enviroment的简写,表示环境变量 |
-f | –force的简写,表示强制执行,–file的简写,表示者件路径| |
-g | –global 的简写,表示全局 |
-h | –help 的简写,显示帮助信息, –human 表示人类可理解 |
-i, -I | –input 的简写,表示输入,–ignore 的简写,表示忽略 |
-k | –keep的简写,表示保持 |
-l | –list的简写, 表示列表展示 |
-m | –motify的简写,表示修改 |
-n | –number的简写, 表示数量 |
-o | –output的简写,表示输出 |
-p | –port的简写, 表示端口 |
-q | –qualify的简写,表示独一 |
-r | –recursion的简写,表示递归 |
-s | –set的简写, 表示设置 |
-t | 表示 –terminal 或者 –time |
-u,-U | –user 表示用户, –update 表示更新 |
-v, -V | –version的简写,显示版本信息或者调试信息 |
-w | –workspace的简写,表示工作空间 |
-x | 显示执行过程 |
-y | –year的简写,表示年份 |
-z | –zone的简写,表示区域 |