搞技术的人可能比较认真。 之前只知道CLI,甚至一度把REPL当成CLI。那下面说说2个东西都是啥。 ####################################################### CLI: 我猜你肯定知道什么是CLI。英文是:command-line interface 就是类似于linux命令行界面那种程序。目前主流的标准分POSIX和GNU两种; 不刀,直接上图说事:
这种的就叫CLI.你会发现有2种参数设置方式,没错一种是GNU标准(--help),一种是POSIX标准(-h) REPL: 我想你肯定也见过REPL,而且你知道什么叫交互环境。那没错,PERL就是交互环境,英文是: read–eval–print- loop 没错,想想你在交互环境下面的经历,就是输入(read)->执行(eval)->显示结果(print),然后最外层是个大的循环. 同样不刀。直接上图说事: 这种就是典型的REPL. HIVE: 如果你用过hive,那你会发现它支持CLI和REPL。 如hive -e "XXXX";hive -f "XXXX";这种是CLI 直接输入hive,出来那个有>提示符的界面就是REPL了。 HIVE的提示扩展: 刀了这么多,只讲点概念,有点对不起观众。 c/c++领域实现CLI与PERL自然有很成熟的工具包。 java领域有2个非常著名的包分别来做这2件事: CLI: commons-cli : REPL: jline : http:// jline .sourceforge.net java领域实现这种功能基本都是这2个包在做,hive当然也是。这2个包静静的躺在路径的lib下面 ########################## 那有什么用呢?这里举个比较有意思的例子。 如果你常用hive的REPL,那么我想你肯定用过它的自动提示功能,你肯定也想过这个提示的功能太有限,我能定制提示嘛?类似于mysql的rehash功能。这样输入的时候就不用记那么多表名、字段什么的啦啊; 一个简单而单纯的想法是,我把这些可以提示的词放在一个结构里面,然后我可以CRUD这个结构,这样与提示功能本身分离不是更好; 你可能有不一样的想法,但我推荐你这么做。一个文件,里面一行放一个你需要提示的词;这样你可能通过外部程序(直接echo也可以啊,噗~)对这个 文件本身进行CRUD;然后hive内部的jline读这个文件,进行提示.很明显的我们通过一个配置文件做到了解耦. 直接上段代码,你用十分钟学下jline,你就能明白我写的这个是什么意思了: 没错,我们在用户的根目录下面定义了个.hive-user-keys文件,然后我们可以定期的把需要提示的词整理写入这个文件,然后在PERL中你就能把这些词T出来了。不是很酷嘛? ############ 你自己写的一些小程序,通过CLI、JLINE也可以提供非常亲切的用户体验,至少显得你很专业!~