Почему я не могу adb shell
?
[klm@kth ~]$ echo foo | adb shell cat ^C
Вышеупомянутая команда зависает на моем эмуляторе 4.0.1, и я не вижу ожидаемого выхода foo
.
Я предполагаю, что это потому, что adb shell
не транслирует свой stdin в его дочерний процесс stdout, а cat
сидит и ждет навсегда. Это действительно не реализовано в adb
, или я чего-то не хватает?
Альтернативным вариантом может быть использование переадресации портов adb и netcat.
Установите сторону Android для получения:
busybox nc -lp 5555 > piped_file.txt
ПК, переадресовать и отправить:
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
ПК netcat подключается к netcat 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
с момента 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
прослушиватель, который запускает указанную команду при подключении, а затем подключается к нему.