通过管道进入`adb shell`

问题描述 投票:0回答:4

为什么我无法通过管道进入

adb shell

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

上述命令挂在我的 4.0.1 模拟器上,并且我没有看到预期的

foo
输出。

我认为这是因为

adb shell
没有将其标准输入通过管道传输到其子进程的标准输出中,并且
cat
永远坐着等待。这真的没有在
adb
中实现吗,还是我错过了什么?

android pipe adb
4个回答
9
投票

另一种选择可能是使用 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网猫通过转发端口连接Android网猫,

piped_file.txt
下发。


附加信息
与 tar 结合使用,您可以将整个目录结构复制到您的设备上。

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

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

4
投票

这是正确的。此功能尚未实现。

更新:

自从最初的问题发布以来,

adb

 中已经修复了许多错误并实现了新功能。包括对 
stdin
 正确处理 
adb shell
 的支持。因此不再需要 
netcat
 解决方法。


2
投票
尝试一下:

echo foo | adb shell cat -


cat file | adb shell "cat - > file.txt"


cat file | adb shell md5sum


    


1
投票
这是我的解决方案。将以下内容放入

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

 侦听器,该侦听器在连接上运行指定的命令,然后连接到它。

© www.soinside.com 2019 - 2024. All rights reserved.