如何将字母加键盘组合发送到adb shell?

How to send letters plus keyboard combination to adb shell?

从 Linux 命令行到 运行 我的程序我这样做:

要停止,我需要输入字母“T”,然后按回车键,否则 devprog 将永远保持 运行ning。我想找到一种方法 运行 devprog 三秒钟,然后通过发送键盘键“T + Enter”正确退出 devprog。我怎样才能做到这一点,或者甚至可以用 shell?

我尝试了以下方法:

我不知道还能对 运行 我的程序做些什么三秒钟然后退出带有关键字组合的命令。

注意:我试过 adb shell ./data/devprog count & sleep 3 | xargs adb shell 杀死。这将停止程序,但不会 return devporg 的任何输出。

#!/usr/bin/env bash
adb shell < <(
  printf '%s\n' \
    'cd /data || exit' \
    'exec ./devprog count'
  sleep 3
  printf '%s\n' T
)

解释其中不明显的部分:

  • <(...)是一个process substitution; shell 将其替换为引用 FIFO 的文件名,从中可以读取 ... 的输出。
  • adb shell < <(...) 因此 运行s adb shell,其输入从具有嵌入式代码的进程替换重定向。
  • printf '%s\n' "some text" "some more text"写两行,先是some text,然后是some more text。我们用这个来无条件地写出我们想要的命令 运行.
  • cd 上使用 || exit 可防止脚本在 cd 失败时继续执行 运行,因此我们不会调用可能在外部行为不可预测的命令他们预期的环境。
  • exec ./devprog count中使用exec将远程shell替换为./devprog的副本,因此我们无需担心如果[=23]会发生什么=] 提早退出并让我们回到 shell 中:通过所做的更改,可以保证当 ./devprog 退出时,远程 shell.
  • 也会退出

为什么我们使用进程替换而不是 heredoc?那是因为 heredoc 在执行开始之前被完全评估,所以在 heredoc 中嵌入类似 $(sleep 3) 的东西会延迟 adb 开始,但它不会造成延迟 while adb 是 运行宁.