亚行贝壳和红宝石

时间:2017-03-05 07:35:21

标签: ruby shell adb

尝试编写一个小的ruby脚本来自动化我目前在Windows命令提示符下手动执行的一些繁琐的工作。

伪代码:

system“adb kill-server”

system“adb start-server”

系统“adb connect 192.168.xxx.xxx”

系统“adb shell”

这就是我被困住的地方。

在adb shell提示符下,我想:

cd到/ some / directory

rm一堆文件

在我的ruby脚本中,如何在adb shell提示符下插入cd命令? 然后在adb shell提示符下插入rm命令。

我试过“系统”没有效果。我假设“system”只能用于与windows命令提示符进行通信,而不是adb shell吗?

非常感谢任何帮助。 感谢。

2 个答案:

答案 0 :(得分:0)

尝试以下代码

#!/usr/bin/env ruby
#
require 'pty'
require 'expect'

system "adb kill-server"
system "adb start-server"
system "adb connect 192.168.xxx.xxx"
PTY.spawn("adb shell") do |output, input, process_id|
  input.puts("cd /to/some/directory")
  input.puts("rm a-bunch-of-files")
  input.puts("exit")
end

答案 1 :(得分:0)

user1835175的PTY建议如果有一个等效的工作窗口就会很棒。在ConEmu Bash控制台的Windows7 / Ruby 2.3.0下尝试了rubysl-pty,但没有用,你可以提出一个新的问题如何在Windows中安装它。

我使用Autoit在另一个终端上做了类似的事情。 它有自己的脚本语言,但你也可以从Ruby使用它。

你可以在Ruby中使用它,如下所示(它可以更简单,但我也需要鼠标控制),请参阅其他示例,但这是适用于我的代码..

require 'win32ole'

# AutoIt3 needs to be installed
app = "Adb" 
appClass = "[CLASS:SunAwtFrame]"    # retrieved with AutoIt Window Info 
ai = WIN32OLE.new("AutoItX3.Control")
ai.WinActivate(appClass)
handle = "[HANDLE:#{ai.wingethandle(appClass)}]" 
ai.Opt("MouseCoordMode", 0)
ai.Opt("WinTitleMatchMode", 4)

ai.Send('cd \somefolder')
ai.Send('{ENTER}')
...