Mi post es más un comentario que una respuesta (pero no puedo comentar). Todos mis comentarios a continuación abordan sólo el caso de Windows adb host.
adb shell gzip >C:\test.gz <C:\test.txt
probablemente funciona sólo porque el archivo de entrada es un archivo de texto.
adb shell gzip >C:\test.gz <C:\test.bin
falla porque la llamada a la función de lectura de Windows en adb deja de leer en cuanto se lee el byte 0x1A (ctrl+Z). Este es el modo de operación de texto por defecto de la función de lectura de Windows. La solución utilizada por exec-in
y exec-out
es llamar a _setmode() para configurar la escritura y lectura de descriptores de archivo en modo binario.
Por desgracia, la mayoría de las veces <test.bin adb exec-in "cat - > sdcard/test.bin"
falla también para la versión de adbd < 1.0.41 (es decir, cualquier cosa por debajo de Android 10). La causa es probablemente algunos problemas de condición de carrera en el código usb.cpp de adbd.
Android 10 soluciona esto con la implementación de FFS sin bloqueo y <test.bin adb exec-in "cat - > sdcard/test.bin"
funciona con Windows (probado con LineageOS 17.1 + Windows 10)
0 votos
exec-in
yexec-out
sólo puede escribir/leer en/desde ficheros, no en STDOUT/STDIN: Android.googlesource.com/platform/system/core/+/ . Sin embargo, puede utilizar shell:adb shell gzip >C:\test.gz <C:\test.txt
. Esto no escribirá nada en el dispositivo Android. Sin embargo, este no es el método recomendado. Algunos caracteres no deseados pueden ser incluidos al leer/escribir en el terminal. Por cierto, ¿qué comando de Android quieres usar en el PC? ¿Por qué no lo tienes en el PC?0 votos
La orden
adb shell gzip >C:\test.gz <C:\test.txt
crea untest.gz
que es igual quetest.txt
no un archivo. También se cuelga el intérprete de comandos (es necesario pulsar Ctrl+C). Gracias por la información, queexec-in
yexec-out
no puede utilizar STDOUT/STDIN.0 votos
Correcto, ese sería el caso si estás en Windows PC. El manejo de Windows de las cosas relacionadas con el terminal es pobre.
adb
no reenviaría los datos leídos desdetest.txt
a STDIN deshell (/system/bin/sh
)`. Acabo de probarlo en Linux/Android y funciona.