Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Pipe en `adb shell`

¿Por qué no puedo tubería en la adb shell ?

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

El comando anterior se bloquea en mi emulador 4.0.1, y no estoy viendo la salida foo esperado.

Supongo que es porque adb shell no canaliza su stdin en su stdout de proceso-niño, y el cat sienta y espera para siempre. ¿Realmente esto no se ha implementado en adb , o me estoy perdiendo algo?

  • Cómo usar unix pipes en Android
  • Transferir InputStream a otro servicio (a través de límites de proceso) con ParcelFileDescriptor.createPipe () falla con "EBADF (número de archivo incorrecto)"
  • 3 Solutions collect form web for “Pipe en `adb shell`”

    Una opción alternativa puede ser utilizar el reenvío de puertos adb y netcat.

    Establecer el lado de Android para recibir:

     busybox nc -lp 5555 > piped_file.txt 

    PC lado, establecer la transmisión y enviar:

     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 

    El netcat de PC se conecta al netcat de Android a través del puerto reenviado y se entrega el piped_file.txt .


    Información adicional
    Combinado con el alquitrán, usted puede copiar estructuras enteras del directorio en su dispositivo.

    busybox nc -lp 5555 | tar -x # Android side

     adb forward tcp:4444 tcp:5555 # PC side tar -c directory | busybox nc localhost 4444 

    Esto es correcto. Esta funcionalidad no se ha implementado.

    Actualizar:

    Se han corregido muchos errores y se han implementado nuevas funciones en adb desde el momento en que se publicó la pregunta original. Incluye soporte para la correcta gestión de stdin por adb shell . Así que ya no hay necesidad de las soluciones de netcat más.

    Aquí está mi solución. Coloque lo siguiente en el archivo adb_shell.sh y utilícelo en lugar de 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 

    Esto crea un oyente nc que ejecuta el comando especificado en la conexión y, a continuación, se conecta a ella.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.