Запустите скрипт как root через ADB

Я создал скрипт для монтирования разделов и сделать некоторые вещи в моей системе 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 можно вызвать из другого скрипта.

у вас есть какие-либо идеи, как я могу добиться этого ?

спасибо !

6 ответов


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

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

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

затем запустите myscript.летучая мышь из оболочки DOS.

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

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

это приводит к "синтаксической ошибке: Unterminated quoted string"


это работает :

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), мне интересно.


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

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

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

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

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

chmod ugo=rwx /bin/script.sh

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


Я не уверен, предоставил ли я решение или попросил лучшего. Я хотел запустить около 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