Запустите скрипт как 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