为什么我不能管到adb shell
?
[klm@kth ~]$ echo foo | adb shell cat
^C
上述命令挂在我的4.0.1模拟器,和我没有看到预期的foo
输出。
我相信这是因为adb shell
不会管的标准输入到其子进程stdout和cat
坐着永远等待。 有这真的没有在实施adb
,还是我失去了一些东西?
为什么我不能管到adb shell
?
[klm@kth ~]$ echo foo | adb shell cat
^C
上述命令挂在我的4.0.1模拟器,和我没有看到预期的foo
输出。
我相信这是因为adb shell
不会管的标准输入到其子进程stdout和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
交付。
附加信息
与焦油相结合,可以整个目录结构复制到您的设备。
busybox nc -lp 5555 | tar -x # Android side
adb forward tcp:4444 tcp:5555 # PC side
tar -c directory | busybox nc localhost 4444
这是对的。 此功能尚未实现。
更新:
很多的bug已经修复,并实现了新的功能, 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
它运行在所述连接的所述指定的命令,然后连接到它侦听器。