本文首先公布在

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 << {
      1. :command => "grep --include=#{ pattern } -Rn #{ contains } #{ directory }",
      1. :explanation => "Find files with extension that contains string."
      1. }

    我们以 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. Educational Codeforces Round 38 部分题解

    D. Buy a Ticket 分析 建一个源点,连向所有结点,边的花费为那个结点的花费,图中原有的边花费翻倍,最后跑一遍最短路即可. code #include<bits/stdc++.h&g ...

  2. centos7-硬盘坏道检测

    #检测坏道命令,结果输出到 /home/badblocks.log badblock -s -v -o /home/badblocks.log /dev/sdb1 [注]:硬盘损坏程度不同,block ...

  3. RxSwift 系列(二)

    前言 Subject是一个代理,它既是Observer,也是Observable.因为它是一个Observer,它可以订阅一个或多个Observable;因为它是一个Observable,它又可以被其 ...

  4. Hibernate iterate(迭代)

    在Hibernate中,有它自己的iterate方法.这里是一个n+1的问题,n代表数据量,而1表示查询所有的主键. 这里与List进行比较. 这里使用list时会将所有数据查询出来. 而在使用ite ...

  5. vmware12中centos7以NAT连接网络

    1.第一步当然是安装VM和安装CentOS,我用的是VM12和64位的CentOS7,怎么安装在我的其他文中有写到: http://www.cnblogs.com/wuyx/p/7246675.htm ...

  6. [CodeForces-375E]Red and Black Tree

    题目大意: 给你一棵带边权的树,每个结点可能是红色或者黑色,你可以交换若干个点对使得任意一个红点到达与其最近的黑点的距离小于等于m. 思路: 动态规划. f[i][j][k]表示以i为根的子树中,连向 ...

  7. bzoj2938 病毒

    Description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码 ...

  8. VK Cup 2016 - Qualification Round 2 D. Three-dimensional Turtle Super Computer 暴力

    D. Three-dimensional Turtle Super Computer 题目连接: http://www.codeforces.com/contest/638/problem/D Des ...

  9. HTML5 本地存储(Web Storage)

    HTML5 提供了两种在客户端存储数据的新方法: localStorage - 本地永久存储,下次打开浏览器数据依然存在 sessionStorage - 只存在于一个会话的数据存储,关闭浏览器数据会 ...

  10. Simple microcontroller-temperature measurement uses only a diode and a capacitor

    Using a PN-junction diode for temperature measurement usually depends on its 2‑mV/K temperature  coe ...