智能化的命令行工具-betty
本文首先公布在
CSDN的文章编辑器实在太烂了,建议大家用Cmd Markdown。它不但支持markdown。还支持VIM模式。
智能化的命令行工具-betty
betty tool command ruby
betty 是一个用Ruby实现的很easy,好玩的智能化命令行提示工具。
主要解决的问题是将英文翻译成机器能够理解的unix命令。在它的官方文档中,我们能够找到具体的说明和解释。本文的主要目的在于依据betty为基础,定制我们自己的"英语命令"。
基本原理
整个程序的入口是main.rb文件,它的主要功能是
- 接受命令行參数
- 从
lib/*.rb装载全部能够运行的文件 - 匹配寻找能够运行的命令
- 运行命令
假设你成功安装了,你会发如今~/.bash_profile 或者其它的系统配置文件里。有一行类似于例如以下的代码
alias betty="xxx/betty/main.rb"
从以上的分析能够看出,betty 不负责详细的命令运行,仅仅负责将我们通俗的语言(比方英语)转换成能够被系统运行的命令。
lib/*.rb中的文件,负责
- 推断命令是否匹配(使用正则match)
假设匹配,以JSON形式返回匹配的命令和说明
responses << {:command => "grep --include=#{ pattern } -Rn #{ contains } #{ directory }",:explanation => "Find files with extension that contains string."}
我们以
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,主要的过程例如以下
- 在lib中定义一个新的module
- 定义一个类方法
interpret(command) - 假设匹配
command,则返回response - 将
executor注冊到$executors中
详细的代码请參考 https://github.com/chucai/betty
总结
betty真是一个好玩的工具。实现自己的特定的命令也特别的简单。
并且。这个项目还能够往更复杂的方向发展。比方类似于siri的语音提示,还有我们也能够定制自己的中文提示。
因为这个项目才刚刚開始,所以还是有非常多的不足之处,比方我们在处理特定的语音的时候,用的是正則表達式,还不够智能,逻辑也特别简单,假设想定制自己的需求。须要用户自己实现很多其它的细节。
但总体来说,这是一个非常棒的工具。
智能化的命令行工具-betty的更多相关文章
- windows下的命令行工具babun
什么是babun babun是windows上的一个第三方shell,在这个shell上面你可以使用几乎所有linux,unix上面的命令,他几乎可以取代windows的shell.用官方的题目说就是 ...
- 『.NET Core CLI工具文档』(一).NET Core 命令行工具(CLI)
说明:本文是个人翻译文章,由于个人水平有限,有不对的地方请大家帮忙更正. 原文:.NET Core Command Line Tools 翻译:.NET Core命令行工具 什么是 .NET Core ...
- 命令行工具aspnet_regiis.exe实现加密和解密web.config
命令行工具aspnet_regiis.exe,是一个类似于DOS的命令工具,称之为命令解释器.使用命令行工具加密和解密web.config文件中的数据库连接字符串时,只需要简单的语法命令即可. 加密语 ...
- nodejs 编写(添加时间戳)命令行工具 timestamp
Nodejs除了编写服务器端程序还可以编写命令行工具,如gulp.js就是Nodejs编写的. 接下来我们来实现一个添加时间戳的命令: $ timestamp action https://www.n ...
- 如何用Node编写命令行工具
0. 命令行工具 当全局安装模块之后,我们可以在控制台下执行指定的命令来运行操作,如果npm一样.我把这样的模块称之为命令行工具模块(如理解有偏颇,欢迎指正) 1.用Node编写命令行工具 在Node ...
- Orchard中的命令行工具
在Orchard中提供了一个命令行工具,我们可以使用这个命令行工具创建用户.创建博客.生成代码.配置网站.打包模块等.并且这个命令行工具是可以扩充的,只要我们在自己开发的模块中创建一个Command类 ...
- Linux 性能监控之命令行工具
引言 对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.这些命令行工具可以在各种Linux系统下使用,可以用于监控和查找产生性能问题的原因.这个命令行工具列表提供了足够的 ...
- 命令行工具解析Crash文件,dSYM文件进行符号化
备份 文/爱掏蜂窝的熊(简书作者)原文链接:http://www.jianshu.com/p/0b6f5148dab8著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 序 在日常开发 ...
- MySQL 命令行工具之 mysqldump 深入研究
mysqldump 是MySQL的一个命令行工具,用于逻辑备份.可以将数据库和表的结构,以及表中的数据分别导出成:create database, create table, insert into的 ...
随机推荐
- Tomcat在Eclips中的使用及注意细节
1.运行环境,先配置Eclips Eclips中的Windows→ preferences→弹出框左边Server→Runtime Environments→右边Add添加需要的Apach Tomca ...
- FastReport.Net使用:[23]图表(Chart)控件
图表基本设置 1.拖放一个图表控件到报表设计界面中. 2.右键菜单“编辑”或者双击图表进入图表编辑器 3.将原有的簇状柱状图删除,添加圆环图 4.绑定数据源,并且指定X,Y轴数据. X轴数据为科目名称 ...
- openssl-0.9.8k_WIN32(RSA密钥生成工具
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha openssl-0.9.8k_WIN32(RSA密钥生成工具
- Opencv学习笔记2:图像模糊作用和方法
一.意义和作用: 图像的模糊处理就是将图片处理的更加模糊,如下图,左侧是原图,右侧是经过处理之后的图片. 从主观意愿上说,我们希望看到清晰的图像,而不是模糊的图像.所以很多时候我们听说还有一种专门进行 ...
- [CodeForces850C]Arpa and a game with Mojtaba
题目大意: 给你一个包含n个数的数列,两个人轮流对数列进行如下操作: 选择一个质数p和一个正整数k,将数列中所有能被p^k整除的数除以p^k. 最后不能操作者负. 问先手是否有必胜策略. 思路: 显然 ...
- ZOJ 3687 The Review Plan I 容斥原理
一道纯粹的容斥原理题!!不过有一个trick,就是会出现重复的,害我WA了几次!! 代码: #include<iostream> #include<cstdio> #inclu ...
- bzoj 2056: gift? 高精度?
2056: gift? 高精度? Time Limit: 10 Sec Memory Limit: 1 MB Description Input 输入的第一行为一个整数t. 接下来t行,每行包含 ...
- 02-MariaDB主从安装SpringBoot整合MyBatis配置
关于MariaDB的介绍 MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为My ...
- HDU 4612 Warm up tarjan 树的直径
Warm up 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4612 Description N planets are connected by ...
- axios 与 Jquery-ajax 的使用区别
axios 和 ajax 的使用方法基本一样,只有个别参数不同: 附:axios 中文文档 一.axios axios({ url: 'http://jsonplaceholder.typicode. ...