Труба в оболочку adb
Почему я не могу adb shell
?
[[email protected] ~]$ echo foo | adb shell cat
^C
Вышеупомянутая команда зависает на моем эмуляторе 4.0.1, и я не вижу ожидаемого выхода foo
.
Я предполагаю это, потому что adb shell
не передает свой stdin в его дочерний процесс stdout, а cat
сидит и ждет навсегда. Это действительно не реализовано в adb
, или я чего-то не хватает?
Ответы
Ответ 1
Альтернативным вариантом может быть использование переадресации портов 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
Ответ 2
Это верно. Эта функциональность не реализована.
Обновить:
Исправлено множество ошибок, а новые функции реализованы в adb
с момента adb
исходного вопроса. Включая поддержку правильной обработки stdin
adb shell
. Поэтому нет необходимости в обходных решениях netcat
.
Ответ 3
Вот мое решение. Поместите следующее в файл adb_shell.sh
и используйте его вместо adb shell
:
#!/bin/bash
adb forward tcp:12345 tcp:12345
adb shell busybox nc -lp 12345 -e "[email protected]" &
sleep 1s
exec nc -q 1 localhost 12345
Это создает nc
прослушиватель, который запускает указанную команду при подключении, а затем подключается к нему.