本文首先公布在

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. [Codeforces995C]Leaving the Bar 瞎搞

    大致题意: 给出平面上n个向量,对于每个向量可以选择正的V或负的-V,求按照选择的向量走完,最后距离原点<=1.5*1e6的一个选择方案 非正解!!!!!!!!!! 先按距离原点距离由远到近贪心 ...

  2. Python的环境搭建——万丈高楼平地起

    Python的环境搭建,远程连接,端口映射,虚拟机 写在正文之前 python语言的开发环境还是相对比较简单的,但是也是有很多需要注意的地方,对于初次接触python或者以前很少用到虚拟环境的朋友来说 ...

  3. /etc/default/useradd配置文件详解

    /etc/default/useradd文件内容如下: [xf@xuexi ~]$ cat /etc/default/useradd # useradd defaults file GROUP=100 ...

  4. Xamarin.Forms教程开发的Xcode的下载安装

    Xamarin.Forms教程开发的Xcode的下载安装 Xamarin.Forms教程开发的Xcode的下载安装,Xcode是开发iOS应用程序的图形化开发工具.本节将讲解Xamarin.Forms ...

  5. [bzoj1024][SCOI2009]生日快乐 (枚举)

    Description windy的生日到了,为了庆祝生日,他的朋友们帮他买了一 个边长分别为 X 和 Y 的矩形蛋糕.现在包括windy,一共有 N 个人来分这块大蛋糕,要求每个人必须获得相同面积的 ...

  6. bzoj 2565: 最长双回文串 manacher算法

    2565: 最长双回文串 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem. ...

  7. hdu 4111 Alice and Bob 记忆化搜索 博弈论

    Alice and Bob Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pi ...

  8. dsh安装指南

    dsh批量管理linux服务器 一,安装dsh 切换到root用户,然后切换到work_home_yourname wget http://www.netfort.gr.jp/~dancer/soft ...

  9. IPC low/medium/high density 什么意思?

    http://wiki.altium.com/pages/viewpage.action?pageId=3080344 Land Pattern Information Density Level A ...

  10. matlab colormap

    This table lists the built-in colormaps functions. Colormap Name Color Scale parula