2012-01-06 41 views
21

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.Ejecutar un script como root a través de ADB

Quiero llamar a la secuencia de comandos desde ADB, que a su vez se llama desde un archivo por lotes en Windows, pero debe ejecutarse como raíz.

La primera solución que probé fue a llamar a la secuencia de comandos con

adb shell "su -c sh /bin/script.sh" 

pero no funciona ya que me da un acceso 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 un acceso root en mi guión , pero tengo el mismo problema. Cuando ejecuto el script, solo obtengo un shell raíz y no se ejecuta nada.

Si utilizo la primera solución a mano (por ejemplo, invoco adb shell su, entonces mi script), funciona. Sin embargo, el objetivo es automatizar el proceso para que adb shell pueda ser llamado desde otro script.

¿Tiene alguna idea de cómo podría lograr esto?

Gracias!

Respuesta

50

Esto funciona para mí:

Crear myscript.bat y pone en él (nótese las comillas simples alrededor de los comandos a ejecutar en modo superusuario):

adb shell "su -c 'command1; command2; command3'" 

continuación, ejecute miscript .bat desde un shell DOS.

Nota: no parece que el carácter de continuación de línea DOS (^) funcione en esta situación. En otras palabras, el siguiente no funciona para mí:

adb shell "su -c '^ 
command1;^
command2;^
command3'" 

Esto se traduce en "Error de sintaxis: no terminada citado cadena"

+0

Esto funciona increíblemente en mi Samsung Note 4 versión Exynos, versión del sistema Android 4.4. He buscado en línea soluciones para todo el día. Gracias a Dios, finalmente leí esta publicación. Funciona. El RootAdb solía funcionar en la tableta Galaxy Note 10.1, pero ya no funciona para este Note4. –

+0

en Android 7.1.1 Descubrí que el uso de comillas simples dentro de las comillas dobles realmente arruinaba la ejecución. Eliminarlos parecía hacer que todo funcionara como se esperaba. – MikeSchem

0

but it does not work as it gives me a shell access (with root permissions), but nothing is executed.

¿Cómo se puede saber si se le otorgan 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 mediante chmod al archivo.

chmod ugo=rwx /bin/script.sh 
+0

Nada, pero la consola muestra una concha eran puedo escribir mis órdenes, con "#", lo que significa que tengo un acceso de root. Y sí, mi dispositivo está rooteado. Mi script también tiene los permisos de ejecución, pero la llamada a sh /bin/script.sh no debería necesitar este permiso, ¿verdad? –

+0

Ah, ni siquiera me di cuenta, pero tiene razón acerca de no tener que tener permisos de ejecución. Puedes probar 'source /bin/script.sh' y ver si eso es diferente (probablemente no). – DavidDraughn

0

Parece que yo estaba usando una versión muy simple de Do que no lo hizo acepta el argumento -c. He copiado otro su que funcionó.AndyD es totalmente justo, aunque, por lo que estoy aceptando su respuesta en lugar de la mía :)

+1

La mina tampoco funciona. ¿Copiaste el tuyo de dónde? – barlop

1

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 

Por "copia" de un archivo local a una ruta androide necesidad de tener privilegios de root (pero alocalfile no debe contener'):

cat alocalfile | adb shell echo "echo '`cat`' > /data/data/aforbiddenfolder/file" \| su 

Si tienes una mejor manera (incluso para las versiones su que no tienen), estoy interesado.

1

Esto funciona para mí: se ejecuta

adb shell "su -c ./data/local/tcpdump-arm -s 0 -v -w /data/local/appxpress_dump.pcap" 
+2

¿Hay algo nuevo sobre este comando que no se haya mencionado anteriormente? – slhck

+0

no hay comillas simples alrededor de los comandos del dispositivo. después de que los quité, todo comenzó a funcionar. Gracias. – balbelias

Cuestiones relacionadas