2012-01-06 24 views
21

Ho creato uno script per montare partizioni e fare alcune cose nel mio sistema Android. Ho salvato lo script come install.sh nella cartella/bin di Android.Avvia uno script come root tramite ADB

Voglio chiamare lo script da ADB, che è esso stesso chiamato da un file batch su Windows, ma deve essere eseguito come root.

La prima soluzione che ho provato è stato quello di chiamare lo script utilizzando

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

ma non funziona come mi dà un accesso alla shell (con i permessi di root), ma nulla viene eseguito. Ho anche provato a chiamare

adb root "sh /bin/script.sh" 

ma ho ottenuto il seguente errore

adbd cannot run as root in production builds 

Allora ho provato a scrivere

su -c "command" 

per tutti i comandi che hanno bisogno di un accesso di root nel mio script , ma ho lo stesso problema. Quando eseguo lo script, ottengo solo una shell di root e non viene eseguito nulla.

Se utilizzo la prima soluzione a mano (ad esempio chiamo adb shell su, quindi il mio script), funziona. Tuttavia l'intero punto è quello di automatizzare il processo, in modo che la shell adb possa essere chiamata da un altro script.

Avete qualche idea di come potrei ottenere questo?

Grazie!

risposta

50

questo funziona per me:

Creare myscript.bat e messo in esso (notare le virgolette singole intorno ai comandi da eseguire in modalità superuser):

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

quindi eseguire myscript .bat da una shell DOS.

Nota: non sembra che il carattere di continuazione della linea DOS (^) funzioni in questa situazione. In altre parole, il seguente non funziona per me:

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

Ciò si traduce in "Errore di sintassi: Unterminated citato stringa"

+0

Questo funziona incredibilmente sulla mia versione di Samsung Note 4 Exynos, versione di sistema Android 4.4. Ho cercato online soluzioni per l'intera giornata. Grazie a dio, ho finalmente letto questo post. Funziona. Il RootAdb funzionava con il tablet Galaxy Note 10.1, ma non funziona più con questo Note4. –

+0

su Android 7.1.1 Ho scoperto che l'utilizzo delle virgolette singole all'interno delle virgolette doppie ha effettivamente compromesso l'esecuzione. Rimuovendoli sembrava che tutto funzionasse come previsto. – MikeSchem

0

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

Come fai a sapere che le autorizzazioni di root sono state concesse? Presumo che stai tentando di eseguire lo script su un dispositivo? Il tuo dispositivo è stato rootato?

Potrebbe essere necessario fornire autorizzazioni di esecuzione tramite chmod al file.

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

Nulla viene eseguito, ma la console visualizza un guscio erano posso scrivere i miei comandi, con "#", il che significa che ho un accesso root. E sì, il mio dispositivo è radicato. Il mio script ha anche le autorizzazioni di esecuzione, ma chiamare sh /bin/script.sh non dovrebbe aver bisogno di questa autorizzazione, giusto? –

+0

Ah, non me ne sono nemmeno reso conto, ma tu hai ragione sul non aver bisogno di avere i permessi di esecuzione. Potresti provare 'source /bin/script.sh' e vedere se è diverso (probabilmente no). – DavidDraughn

0

Sembra che stavo usando una versione molto semplice di Su, che non ha fatto accetta l'argomento -c. Ho copiato un altro su che ha funzionato.AndyD è totalmente giusto, però, quindi sono accettare la sua risposta al posto del mio :)

+1

Anche il mio non funziona. Hai copiato il tuo da dove? – barlop

1

Questo funziona:

adb shell echo command which needs root privileges \| su 

Se avete bisogno di reindirizzamento:

adb shell echo 'echo anytext > /data/data/aforbiddenfolder/file' \| su 

Per "copia" di un file locale ad un percorso android necessitano privilegi root (ma alocalfile non deve contenere'):

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

Se si dispone di un modo migliore (anche per le versioni che non hanno -c), sono interessato.

1

questo funziona per me:

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

C'è qualcosa di nuovo in questo comando che non è già stato menzionato? – slhck

+0

non ci sono singoli apici attorno ai comandi del dispositivo. dopo che li ho rimossi, tutto ha iniziato a funzionare. Grazie. – balbelias

Problemi correlati