管成`ADB shell`(Pipe into `adb shell`)

2019-08-17 09:15发布

为什么我不能管到adb shell

[klm@kth ~]$ echo foo | adb shell cat
^C

上述命令挂在我的4.0.1模拟器,和我没有看到预期的foo输出。

我相信这是因为adb shell不会管的标准输入到其子进程stdout和cat坐着永远等待。 有这真的没有在实施adb ,还是我失去了一些东西?

Answer 1:

一种替代选择可以是使用ADB端口转发和netcat的。

设置的Android方收到:

busybox nc -lp 5555 > piped_file.txt

PC端,一组转发和发送:

adb forward tcp:4444 tcp:5555 # Anything sent to localhost 4444 will be forwarded to Android 5555
cat piped_file.txt | busybox nc localhost 4444 # Pipe through the port to Android

该PC的netcat通过转发端口连接到Android的netcat,并piped_file.txt交付。


附加信息
与焦油相结合,可以整个目录结构复制到您的设备。

busybox nc -lp 5555 | tar -x # Android side

adb forward tcp:4444 tcp:5555 # PC side
tar -c directory | busybox nc localhost 4444


Answer 2:

这是对的。 此功能尚未实现。

更新:

很多的bug已经修复,并实现了新的功能, adb ,因为原来的问题已张贴的时间。 包括适当的支持stdin的处理adb shell 。 因此,没有必要为netcat解决方法了。



Answer 3:

这里是我的解决方案。 将下面的进adb_shell.sh文件,并用它代替adb shell

#!/bin/bash

adb forward tcp:12345 tcp:12345
adb shell busybox nc -lp 12345 -e "$@" &
sleep 1s
exec nc -q 1 localhost 12345

这产生了nc它运行在所述连接的所述指定的命令,然后连接到它侦听器。



文章来源: Pipe into `adb shell`
标签: android pipe adb