ruby开发的交互式程序例子
实现pry,ronin,msf类似的终端下交互功能,这里主要用到了ripl gem:
1.能够调用定义的方法,如help
2.能够执行系统命令
3.能够类似irb/pry进行ruby语言解析
安装:
gem install ripl gem install ripl-shell_commands
示例
ripl这个gem,它也提供很多插件,如下是一个简单的终端下交互实现:
require 'ripl' require 'ripl/shell_commands' require 'ripl/color_result' require 'ripl/color_streams' require 'ripl/commands' require 'ripl/rocket' #设置输出颜色 Ripl.config[:color_streams_stdout] = :light_blue Ripl.config[:color_streams_stderr] = :light_red #定义提示符号 Ripl.config[:prompt] = lambda {"[#{Ripl.shell.line.to_s}] cmd> " } # Define plugins, load files, etc... class Dodolook def help puts "xiaomi noops blog" end def name "wilbur" end end dodo = Dodolook.new verison = "1.0.3" Ripl.start :binding => dodo.instance_eval{ binding }
使用
在终端下运行程序后,出现[0] cmd>这样的提示,其中help、name、dodo这些变量/方法可以tab补全。
运行shell命令前加!,如:!df
还有更多内部方法,如: history, list, jump…
相关推荐
-
Linux下交互式与非交互式修改用户密码的例子
最近管理的一批机器,有个需求是要统一修改一个帐号的用户名密码,比如将qa帐号的密码改为1234,后来还为了脚本化,很方便的执行,还使用了非交互式地修改用户的密码.简单记录一下吧. 1. 交互式配置本地用户的密码:passwd 命令 复制代码 代码如下: [root@host_221-81 ~]# passwd qa Changing password for user qa. New password: BAD PASSWORD: it is too short BAD PASSWORD: is
-
phpmyadmin中为站点设置mysql权限的图文方法
为了防止安全隐患,我们一般针对每个数据库都设置了独立的数据库访问帐号,该帐号仅有访问该数据库的权限.下面就让我们来具体演示一下: 1.首先我们要登陆phpMyAdmin,不做演示. 2.创建一个数据库,如下图,在phpMyAdmin右边窗口中,填写数据库名称,点创建即可. 例如我们这里创建一个名字为:cncmstest 的数据库 创建成功会有如下提示: 3.点击左上角的主页按钮,返回phpMyAdmin主界面: 4.在主界面的右边点击"权限"来创建数据库帐号. 5.
-
node.js学习之交互式解释器REPL详解
简介 repl是Node.js提供的一个Read-Eval-Print-Loop (REPL,读取-执行-输出-循环)实现,它即可以做为一个独立的程序使用,又可以包含在其它应用中使用.REPL是一个互式命令行解析器,它提供了一个交互式的编程环境,它可以实时的验证你所编写的代码,非常适合于验证Node.js和JavaScript的相关API. Node 自带了交互式解释器,可以执行以下任务: 读取 - 读取用户输入,解析输入了Javascript 数据结构并存储在内存中. 执行 - 执行输入的数据
-
浅析mysql交互式连接&非交互式连接
交互式操作:通俗的说,就是你在你的本机上打开mysql的客户端,就是那个黑窗口,在黑窗口下进行各种sql操作,当然走的肯定是tcp协议. 非交互式操作:就是你在你的项目中进行程序调用.比如一边是tomcat web服务器,一边是数据库服务器,两者怎么通信?在java web里,我们通常会选择hibernate或者是jdbc来连接.那么这时候就是非交互式操作. 在之前,我基本上不关系这两个属性,都是用的是mysql服务商推荐的默认值,就是8小时. 但是,从昨天开始,由于在新网租用了一个空间,而他的
-
python实现定制交互式命令行的方法
Python的交互式命令行可通过启动文件来配置. 当Python启动时,会查找环境变量PYTHONSTARTUP,并且执行该变量中所指定文件里的程序代码.该指定文件名称以及地址可以是随意的.按Tab键时会自动补全内容和命令历史.这对命令行的有效增强,而这些工具则是基于readline模块实现的(这需要readline程序库辅助实现). 此处为大家举一个简单的启动脚本文件例子,它为python命令行添加了按键自动补全内容和历史命令功能. [python@python ~]$ cat .python
-
PHP MYSQL简易交互式站点开发
目的:使用PHP和MYSQL模拟权限管理系统的实现 general用户只能查看其他用户信息,不能进行修改,添加,和删除操作,root用户可以完成以上三种操作. 实现思路 1.在MySQL数据库中建立两张数据表.一张数据表保存用户名和密码,用于登陆验证,另一张保存用户权限等基本信息. 2.提交表单登陆时,先在数据库中查找该用户存不存在,若不存在,报错,存在,则验证密码,密码错误则报错,若密码正确,登陆显示所有存储在数据库中的用户信息和当前登陆用户名. 3.在用户进行添加,删除操作时,先判断权限是否
-
Linux中安装Python的交互式解释器IPython的教程
IPython是Python的交互式Shell,提供了代码自动补完,自动缩进,高亮显示,执行Shell命令等非常有用的特性.特别是它的代码补完功能,例如:在输入zlib.之后按下Tab键,IPython会列出zlib模块下所有的属性.方法和类.完全可以取代自带的bash 下面介绍下linux安装IPython四种方法: 第一种:ipython源码安装 ipython的源码下载页面为:https://pypi.python.org/pypi/ipython 或者是到git页面下载:https://
-
IIS 配置PHP站点的说明
第一步:配置PHP 如果你下载的是安装版的php(appserv-win32-2.5.9.exe),按照以下步骤配置: 1.将php.ini-dist复制到 C:\Windows 目录下并改名为php.ini,复制php5ts.dll和libmysql.dll到 C:\Windows\system32 中. 2.用记事本打开php.ini,查找"extension_dir",然后把 extension_dir = "./"修改为 extension_dir = &q
-
PowerShell入门教程之高效使用PowerShell交互式运行环境的几个小技巧
在开始关于脚本.对象和远程处理等复杂的功能之前,一直想再写一篇关于交互式运行环境的文章.因为我觉得这很重要,但是有什么是不重要呢?:)所以,说到底可能是个人喜好吧,我就是特别喜欢这种立等可取的交互方式. 如何高效地使用PowerShell的交互式运行环境呢?所谓"高效",既跟使用这个工具的熟练程度有关,也跟使用这个工具的习惯有关.习惯有无意中养成的,也有主动养成的.如果你恰好玩PowerShell不久,那么就从现在开始主动养成一些好习惯吧. 多用Tab键 在运行环境中,Tab键有补全内
-
Shell脚本中非交互式修改密码的两种方法
今天在写一个shell脚本的时候发现需要设置用户的密码,而设置密码是交互式的,这样在脚本中显然是不太好的,因此上网查找资料,发现了以下两种常见的非交互式设置密码的方式: 1:使用chpasswd chpasswd其实是通过用户输入'用户名:密码'来更改一组用户的密码,还是一个可以批量修改密码的工具,具体的用法详见chpasswd用法,这里只做简单的介绍 格式:# echo 用户名:密码 | chpasswd 实例: 添加一个doiido的帐号,密码为123456 复制代码 代码如下: # ech
随机推荐
- 完美实现浮动元素横排居中显示
- JQuery ajax 返回json时出现中文乱码该如何解决
- JQuery 学习笔记 element属性控制
- 如何解决Windows Vista中无法通过锐捷认证上网的问题
- 在WINXP下建立VPN服务器的方法
- dos命令行中cd命令用法
- Android 环境变量的配置方法
- JavaScript获取数组最小值和最大值的方法
- ASP下的两个防止SQL注入式攻击的Function
- jQuery 写的简单打字游戏可以提示正确和错误的次数
- linux下用csplit命令分割文件的方法示例
- PowerShell中定义多个变量并赋值的例子
- JS中LocalStorage与SessionStorage五种循序渐进的使用方法
- asp.net下将纯真IP数据导入数据库中的代码
- android系统拍照结合android-crop裁剪图片
- Android UI效果之绘图篇(四)
- VC中CWinThread类以及和createthread API的区别分析
- spring data jpa使用详解(推荐)
- 详解如何干净的卸载docker的方法
- Python 进程之间共享数据(全局变量)的方法