为什么我不能插管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 netcat通过转发端口连接到Android netcat,并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
解决方法。
这是我的解决方案。将以下内容放入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
侦听器,该侦听器在连接上运行指定的命令,然后连接到它。