Запустите скрипт как root через ADB - PullRequest
24 голосов
/ 06 января 2012

Я создал скрипт для монтирования разделов и некоторых вещей в моей системе Android.Я сохранил сценарий как install.sh в папке / bin Android.

Я хочу вызвать сценарий из ADB, который сам вызывается из пакетного файла в Windows, но его необходимо выполнить от имени пользователя root.

Первым решением, которое я попытался, было вызвать скрипт с использованием

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

, но он не работает, поскольку дает мне доступ к оболочке (с правами root), но ничего не выполняется.Я также попытался вызвать

adb root "sh /bin/script.sh"

, но получил следующую ошибку

adbd cannot run as root in production builds

Затем я попытался написать

su -c "command"

для всех команд, которые нуждаются вroot-доступ в моем скрипте, но у меня та же проблема.Когда я запускаю скрипт, я получаю только корневую оболочку, и ничего не выполняется.

Если я использую первое решение вручную (например, я вызываю adb shell su, тогда мой скрипт), оно работает.Однако весь смысл в том, чтобы автоматизировать процесс, чтобы adb shell можно было вызывать из другого скрипта.

У вас есть идеи, как мне этого добиться?

Спасибо!

Ответы [ 6 ]

56 голосов
/ 23 февраля 2012

Это работает для меня:

Создайте myscript.bat и вставьте в него (обратите внимание на одинарные кавычки вокруг команд, выполняемых в режиме суперпользователя):

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

, затем запустите myscript.bat из оболочки DOS.

Примечание: не похоже, что символ продолжения строки DOS (^) работает в этой ситуации.Другими словами, следующее не работает для меня:

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

Это приводит к «Синтаксической ошибке: неопределенная строка в кавычках»

3 голосов
/ 17 января 2013

Это работает:

adb shell echo command which needs root privileges \| su

Если вам нужно перенаправление:

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

Для «копирования» локального файла на путь Android, требующего привилегий root (но alocalfile долженне содержат '):

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

Если у вас есть лучший способ (даже для su версий, у которых нет -c), я заинтересован.

2 голосов
/ 21 марта 2013

Это работает для меня:

adb shell "su -c ./data/local/tcpdump-arm -s 0 -v -w /data/local/appxpress_dump.pcap"
0 голосов
/ 28 сентября 2018

Я не уверен, предоставил ли я решение или попросил лучшее.Я хотел выполнить около 200 команд в пакетном режиме для отправки в adb. Я следовал этому подходу

    adb shell "su -c command ; "
adb shell "su -c command ; "
adb shell "su -c command ; "
adb shell "su -c command ; "

и сохранил их в командном файле

Эта команда

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

не будет работать за пределами определенного максимального размера.Не сработало

error: service name too long
0 голосов
/ 24 февраля 2012

Похоже, что я использовал очень простую версию su, которая не принимала аргумент -c.Я скопировал еще один су, который работал.AndyD абсолютно прав, поэтому я принимаю его ответ вместо моего :)

0 голосов
/ 06 января 2012

но это не работает, так как дает мне доступ к оболочке (с правами root), но ничего не выполняется.

Откуда вы знаете, что у вас есть права root?Я предполагаю, что вы пытаетесь выполнить скрипт на устройстве?Ваше устройство было рутировано?

Возможно, вам потребуется предоставить права на выполнение через chmod для файла.

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