• 智能化的命令行工具-betty


    本文首先公布在


    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的语音提示,还有我们也能够定制自己的中文提示。

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

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


  • 相关阅读:
    Ansible import_playbook 导入playbook
    Ansible Playbook 变量传递
    Ansible Notify与Handler组合
    Ansible Role
    Ansible infile模块
    Ansible When有条件的运行任务
    Ansible register捕获命令输出
    Ansible Command Shell Raw模块区别
    Ansible Facts
    Ansible Jinjia2模块
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/6709110.html
Copyright © 2020-2023  润新知