来自adb的'grep'命令的问题

时间:2014-10-27 04:05:11

标签: android adb

当我用adb写道时:

adb shell dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'

我收到错误输出:

'grep' is not recognized as an internal or external command, operable program or batch file.

但如果我把它分成两个操作员:

adb shell 
dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'

它可以正常运行(它提供正在运行的应用程序的主要活动名称)。

如果唯一的方法是将它拆分为两个 - 首先进入adb shell,然后运行Inquire,有一种方法可以从c#中进行吗?

在我的代码中,它只执行第一部分(进入shell)。

这是我的代码:

 public static void startNewProccess(object startInfo)
 {
        p = new Process();
        p.StartInfo = (System.Diagnostics.ProcessStartInfo)startInfo;
        p.Start();
        p.WaitForExit();
 }

 public static void getMainActivity()
 {
 var startInfo1 = new System.Diagnostics.ProcessStartInfo
                { 
                    WorkingDirectory = @ADB_FOLDER,
                    WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal,
                    FileName = "cmd.exe",
                    Arguments = "/c" + " adb shell",
                    //adb shell am start -n com.package.name/com.package.name.ActivityName
                    UseShellExecute = false
                };
                startNewProccess(startInfo1);

                var startInfo2 = new System.Diagnostics.ProcessStartInfo
                {
                    WorkingDirectory = @ADB_FOLDER,
                    WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal,
                    FileName = "cmd.exe",
                    Arguments = "/c" + " dumpsys window windows | grep -E   'mCurrentFocus|mFocusedApp'",
                    UseShellExecute = false
                };
 }

1 个答案:

答案 0 :(得分:24)

grep 中的adb没有问题。您对shell的工作原理有所了解。所以让我们解决一下:

adb shell dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'命令中,只有dumpsys window windows部分在Android上运行。正在Windows PC上运行adb shellgrep命令。因此,您得到的错误 - 您只是没有grep可用。

当您单独运行adb shell时 - 您启动了一个交互式adb shell会话,您输入的所有内容都将在Android端执行。这非常适合手动测试。但在用于自动化时增加了额外的复杂性层。要使用代码中的交互模式,您需要多个线程(一个用于shell本身,另一个用于发送命令)。

但是在你的情况下,你真的不需要那么复杂 - 只需转义“管道”字符或将整个shell命令放在这样的引号中:

adb shell "dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'"