为什么我无法通过管道进入
adb shell
?
[klm@kth ~]$ echo foo | adb shell cat
^C
上述命令挂在我的 4.0.1 模拟器上,并且我没有看到预期的
foo
输出。
我认为这是因为
adb shell
没有将其标准输入通过管道传输到其子进程的标准输出中,并且 cat
永远坐着等待。这真的没有在adb
中实现吗,还是我错过了什么?
另一种选择可能是使用 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
这是正确的。此功能尚未实现。
更新:
自从最初的问题发布以来,adb
中已经修复了许多错误并实现了新功能。包括对
stdin
正确处理
adb shell
的支持。因此不再需要
netcat
解决方法。
echo foo | adb shell cat -
cat file | adb shell "cat - > file.txt"
cat file | adb shell md5sum
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
侦听器,该侦听器在连接上运行指定的命令,然后连接到它。