Permiso denegado al trabajar con/sin "su -c" en /cache

Estoy tratando de emitir este comando

adb shell "su -c echo 'boot-recovery' > /cache/recovery/command"
//OR//
adb shell "echo 'boot-recovery' > /cache/recovery/command"

sale lo mismo:/system/bin/sh: can't create /cache/recovery/command: Permission denied

Otorgué permiso de root para adb y puedo ejecutar otros comandos con root normalmente como touchpor ejemplo

Probé el comando en ambos sentidos cuando el archivo existía y no existía.

Intenté verificar la existencia del archivo:

adb shell "if [ -f /cache/recovery/command ]; then echo "file found"; else echo "error"; fi"

regresó errora pesar de que el archivo existe de hecho

El objetivo es agregar algunas líneas a la cola de recuperación para que se ejecute la próxima vez que el dispositivo inicie la recuperación.

Corríjame, no soy tan bueno en la línea de comandos de Android, ¿necesito usar un comando diferente para lograr este objetivo?

Más información: Android 8.1 (RR oreo)... Magisk SU... TWRP 3.2 (pero necesita que sea compatible con tantas versiones de Android, recuperaciones y su binarios como sea posible... espero jajaja )

Es mejor hacer su pregunta en la comunidad de superusuarios .

Respuestas (2)

adb shell 'su -c "echo \"boot-recovery\" > /cache/recovery/command"'
adb shell 'su -c "'"echo "boot-recovery" > /cache/recovery/command"'"' #Alternative
adb shell "su -c \"echo 'boot-recovery' > /cache/recovery/command\"" #Another alternative
adb shell 'su -c "'"echo "'"boot-recovery"'" > /cache/recovery/command"'"' #yet another alternative

Eso debería funcionar. No estoy seguro de por qué. Esta respuesta de Codeforester podría ayudarlo si está buscando una razón.

Mi opinión es que, en:

adb shell "su -c echo 'boot-recovery' > /cache/recovery/command"

adb shell lanza un shell no interactivo, las comillas dobles se expanden, dejando

su -c echo 'boot-recovery' > /cache/recovery/command

Sin embargo, en esto, solo 'boot-recovery'se ejecuta echo con privilegio de root y la salida resultante recae en el usuario de shell (id=2000) que no tiene el privilegio de escribir en el directorio de caché, de ahí el error.

Citar todo después -cpasa echo 'boot-recovery' > /cache/recovery/commandla instrucción completa al suejecutable, y eso funciona.

Gracias por la información... cómo evitar que llegue a manos del usuario y mantenerlo en modo root... ¿ Son los 4 comandos que escribiste una solución? porque salen igualPermission denied
No sé por qué genera permiso denegado en su caso. Funciona aquí. ¿El shell/adb tiene permiso para cambiar a usuario raíz en su aplicación de superusuario?
en magisk su permite que las aplicaciones y adb tengan acceso de root... Intentaré jugar con otra opción relacionada con el propietario/usuario/algo de acceso de root
Dios mío... El segundo de tus comandos funcionó después de que cambié el modo multiusuario de Device Owner Onlya User Independent... y ahora abrí el commandarchivo, tiene "recuperación de arranque" (éxito)... Funcionó incluso aunque a powershell no le gusta (lo colorea salvajemente)
Perdón por comentar mucho. Ahora lo probé, escribe, commandpero no sucede nada cuando se inicia la recuperación, por lo que no se logra el objetivo principal.
@NHKomaiha es una pregunta completamente diferente, así que haga una nueva pregunta. Gracias. :-)
Aunque mi objetivo principal era hacer la cola, pero está bien... al menos aprendí algo útil aquí, gracias por la ayuda.

Para mí, esto funcionó:

adb shell "su -c 'boot-recovery > /cache/recovery/command'"

Comienza con una comilla doble antes de su -c. Luego, una comilla simple para el comando, una comilla simple después del comando y cierre con una comilla doble.