本文首先公布在

CSDN的文章编辑器实在太烂了,建议大家用Cmd Markdown。它不但支持markdown。还支持VIM模式。

智能化的命令行工具-betty

betty tool command ruby


betty 是一个用Ruby实现的很easy,好玩的智能化命令行提示工具。

主要解决的问题是将英文翻译成机器能够理解的unix命令。在它的官方文档中,我们能够找到具体的说明和解释。本文的主要目的在于依据betty为基础,定制我们自己的"英语命令"。

基本原理

整个程序的入口是main.rb文件,它的主要功能是

  1. 接受命令行參数
  2. lib/*.rb装载全部能够运行的文件
  3. 匹配寻找能够运行的命令
  4. 运行命令

假设你成功安装了,你会发如今~/.bash_profile 或者其它的系统配置文件里。有一行类似于例如以下的代码 

alias betty="xxx/betty/main.rb"

从以上的分析能够看出,betty 不负责详细的命令运行,仅仅负责将我们通俗的语言(比方英语)转换成能够被系统运行的命令。

lib/*.rb中的文件,负责

  • 推断命令是否匹配(使用正则match)
  • 假设匹配,以JSON形式返回匹配的命令和说明

    1. responses << {
    2. :command => "grep --include=#{ pattern } -Rn #{ contains } #{ directory }",
    3. :explanation => "Find files with extension that contains string."
    4. }

    我们以 betty find me all files that contain
    california
     为例解说程序执行流程。

  • betty 命令映射到了 main.rb 文件里, 触发了main方法
  • main 方法调用 interpret 方法
  • interpret 方法的主要职责是在 $executors 中寻找能匹配的命令,它通过调用executor中的interpret方法来实现的
  • executor就是在lib中定义的module

定制自己的executor

目标: 

想实现一个提示命令,比方输入 betty give me a help 就会在屏幕上显示全部的命令提示

依据以上得分析,我们发现实现自己的executor很easy,主要的过程例如以下

  1. 在lib中定义一个新的module
  2. 定义一个类方法 interpret(command)
  3. 假设匹配command,则返回 response
  4. 将 executor 注冊到 $executors 中

详细的代码请參考 https://github.com/chucai/betty

总结

betty真是一个好玩的工具。实现自己的特定的命令也特别的简单。

并且。这个项目还能够往更复杂的方向发展。比方类似于siri的语音提示,还有我们也能够定制自己的中文提示。

因为这个项目才刚刚開始,所以还是有非常多的不足之处,比方我们在处理特定的语音的时候,用的是正則表達式,还不够智能,逻辑也特别简单,假设想定制自己的需求。须要用户自己实现很多其它的细节。

但总体来说,这是一个非常棒的工具。

智能化的命令行工具-betty的更多相关文章

  1. windows下的命令行工具babun

    什么是babun babun是windows上的一个第三方shell,在这个shell上面你可以使用几乎所有linux,unix上面的命令,他几乎可以取代windows的shell.用官方的题目说就是 ...

  2. 『.NET Core CLI工具文档』(一).NET Core 命令行工具(CLI)

    说明:本文是个人翻译文章,由于个人水平有限,有不对的地方请大家帮忙更正. 原文:.NET Core Command Line Tools 翻译:.NET Core命令行工具 什么是 .NET Core ...

  3. 命令行工具aspnet_regiis.exe实现加密和解密web.config

    命令行工具aspnet_regiis.exe,是一个类似于DOS的命令工具,称之为命令解释器.使用命令行工具加密和解密web.config文件中的数据库连接字符串时,只需要简单的语法命令即可. 加密语 ...

  4. nodejs 编写(添加时间戳)命令行工具 timestamp

    Nodejs除了编写服务器端程序还可以编写命令行工具,如gulp.js就是Nodejs编写的. 接下来我们来实现一个添加时间戳的命令: $ timestamp action https://www.n ...

  5. 如何用Node编写命令行工具

    0. 命令行工具 当全局安装模块之后,我们可以在控制台下执行指定的命令来运行操作,如果npm一样.我把这样的模块称之为命令行工具模块(如理解有偏颇,欢迎指正) 1.用Node编写命令行工具 在Node ...

  6. Orchard中的命令行工具

    在Orchard中提供了一个命令行工具,我们可以使用这个命令行工具创建用户.创建博客.生成代码.配置网站.打包模块等.并且这个命令行工具是可以扩充的,只要我们在自己开发的模块中创建一个Command类 ...

  7. Linux 性能监控之命令行工具

    引言 对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.这些命令行工具可以在各种Linux系统下使用,可以用于监控和查找产生性能问题的原因.这个命令行工具列表提供了足够的 ...

  8. 命令行工具解析Crash文件,dSYM文件进行符号化

    备份   文/爱掏蜂窝的熊(简书作者)原文链接:http://www.jianshu.com/p/0b6f5148dab8著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 序 在日常开发 ...

  9. MySQL 命令行工具之 mysqldump 深入研究

    mysqldump 是MySQL的一个命令行工具,用于逻辑备份.可以将数据库和表的结构,以及表中的数据分别导出成:create database, create table, insert into的 ...

随机推荐

  1. 网页后门工具laudanum

     网页后门工具laudanum laudanum是Kali Linux预先安装的Web Shell工具.它支持多种Web后台技术,如ASP.ASP.net .JSP.PHP.Coldfusion.它提 ...

  2. ubuntu 安装qq 及解决安装完搜狗输入法不显示键盘的方法

    安装qq: https://zhuanlan.zhihu.com/p/27549700 解决搜狗输入法不显示的问题: http://blog.csdn.net/crystal_zero/article ...

  3. 初识Linux 基础操作(2)

    1.Linux启动流程    1).linux启动过程        ①.进入grub界面选择相应的启动内核        ②.读取kernel内核文件-/boot/vmlinuz-*         ...

  4. Codeforces Round #348 (VK Cup 2016 Round 2, Div. 2 Edition) E. Little Artem and Time Machine 树状数组

    E. Little Artem and Time Machine 题目连接: http://www.codeforces.com/contest/669/problem/E Description L ...

  5. hdu 4802 GPA 水题

    GPA Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4802 Des ...

  6. Objective-C 关于静态方法与实例方法

    objective-c中非常重要的语法知识,在此归纳总结一下. 类方法,也称静态方法,指的是用static关键字修饰的方法.此方法属类本身的方法,不属于类的某一个实例(对象).类方法中不可直接使用实例 ...

  7. POJ 3525 Most Distant Point from the Sea (半平面交+二分)

    Most Distant Point from the Sea Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 3476   ...

  8. ADC for programmable logic uses one capacitor

    Many electronic devices require user input for setting the application properties. Typical input dev ...

  9. ADC In An FPGA

    http://davidkessner.wordpress.com/2011/05/01/adc-in-an-fpga/ Geek Alert!  What follows is very techn ...

  10. (转)rtmp协议简单解析以及用其发送h264的flv文件

    Adobe公司太坑人了,官方文档公布的信息根本就不全,如果只按照他上面的写的话,是没法用的.按照文档上面的流程,server和client连接之后首先要进行握手,握手成功之后进行一些交互,其实就是交互 ...