Intereting Posts
Использование намерения использовать камеру на Android Как исправить «Пропустите перетаскивание, поскольку мы ждем ответа WebCore на прикосновение» Как вы определяете, поврежден ли .sqlite или .sqback в Java? Поиск в виджетном вызове OnNewIntent дважды Рекомендуемый шаблон проектирования для записи в базу данных SQLite на Android Android: подсказка Spinner Android – пакет org.apache.http не существует sdk 23 Как сделать несколько различных конфигураций экрана для небольшого набора макетов без дублирования частей моего макета XML? Подпись метода GetStaticMethodId для открытого статического MyClass myMethod () UART-периферия для Android Things for Raspberry Pi 3 Ошибка: не удается найти символьную переменную abc_ic_ab_back_mtrl_am_alpha Цвет стрелки ActionBarDrawerToggle v7 Отключить / Включить мобильные данные на Android L с корневым доступом Как сохранить и вернуть файлы cookie в веб-службу? Наложение макета xml в пользовательский класс View

Труба в `adb shell`

Почему я не могу adb shell ?

 [klm@kth ~]$ echo foo | adb shell cat ^C 

Вышеупомянутая команда зависает на моем эмуляторе 4.0.1, и я не вижу ожидаемого выхода foo .

Я предполагаю, что это потому, что adb shell не транслирует свой stdin в его дочерний процесс stdout, а cat сидит и ждет навсегда. Это действительно не реализовано в adb , или я чего-то не хватает?

Solutions Collecting From Web of "Труба в `adb shell`"

Альтернативным вариантом может быть использование переадресации портов 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 прослушиватель, который запускает указанную команду при подключении, а затем подключается к нему.