android - update - rootear con adb
Lanzar un script como root a través de ADB (6)
He creado un script para montar particiones y hacer algunas cosas en mi sistema Android. Guardé el script como install.sh en la carpeta / bin de Android.
Quiero llamar al script desde ADB, que a su vez se llama desde un archivo por lotes en Windows, pero necesita ejecutarse como root
La primera solución que intenté fue llamar al script usando
adb shell "su -c sh /bin/script.sh"
pero no funciona porque me da un acceso de shell (con permisos de root), pero no se ejecuta nada. También traté de llamar
adb root "sh /bin/script.sh"
pero tengo el siguiente error
adbd cannot run as root in production builds
Entonces traté de escribir
su -c "command"
para todos los comandos que necesitan acceso de root en mi script, pero tengo el mismo problema. Cuando ejecuto el script solo obtengo un shell de root y no se ejecuta nada.
Si uso la primera solución a mano (por ejemplo, llamo adb shell su, luego mi script), funciona. Sin embargo, el objetivo principal es automatizar el proceso, de modo que se pueda llamar a adb shell desde otro script.
¿Tienes alguna idea de cómo podría lograr esto?
Gracias !
pero no funciona porque me da un acceso de shell (con permisos de root), pero no se ejecuta nada.
¿Cómo sabes que te dan permisos de root? ¿Supongo que está intentando ejecutar el script en un dispositivo? ¿Su dispositivo ha sido rooteado?
Es posible que deba otorgar permisos de ejecución a través de chmod al archivo.
chmod ugo=rwx /bin/script.sh
Esto funciona :
adb shell echo command which needs root privileges /| su
Si necesita redirección:
adb shell echo ''echo anytext > /data/data/aforbiddenfolder/file'' /| su
Para "copiar" un archivo local a una ruta de Android que necesite privilegios de root (pero alocalfile no debe contener ''
):
cat alocalfile | adb shell echo "echo ''`cat`'' > /data/data/aforbiddenfolder/file" /| su
Si tiene una forma mejor (incluso para las versiones de su
que no tienen -c
), estoy interesado.
Esto funciona para mí:
Cree myscript.bat y colóquelo (tenga en cuenta las comillas simples alrededor de los comandos que se ejecutarán en el modo de superusuario):
adb shell "su -c ''command1; command2; command3''"
A continuación, ejecute myscript.bat desde un shell de DOS.
Nota: no parece que el carácter de continuación de línea de DOS (^) funcione en esta situación. En otras palabras, lo siguiente no funciona para mí:
adb shell "su -c ''^
command1; ^
command2; ^
command3''"
Esto da como resultado "Error de sintaxis: cadena entre comillas sin terminar"
Esto funciona para mí:
adb shell "su -c ./data/local/tcpdump-arm -s 0 -v -w /data/local/appxpress_dump.pcap"
No estoy seguro si proporcioné una solución o pedí una mejor. Quería ejecutar unos 200 comandos en modo por lotes para enviarlos a ADB. Seguí este enfoque
adb shell "su -c command ; "
adb shell "su -c command ; "
adb shell "su -c command ; "
adb shell "su -c command ; "
y los guardé en un archivo por lotes
Este comando
adb shell "su -c ''command1; command2; command3''"
no funcionará más allá de un cierto tamaño máximo. No funcionó
error: service name too long
Parece que estaba usando una versión muy simple de su que no aceptaba el argumento -c. Copié otro su que funcionó. AndyD tiene toda la razón, así que estoy aceptando su respuesta en lugar de la mía :)