Подтвердить что ты не робот

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

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

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

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

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"

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

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

Есть ли у вас какое-то представление о том, как я могу это достичь?

Спасибо!

4b9b3361

Ответ 1

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

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

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

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

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

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

В результате получается "Синтаксическая ошибка: строка с неиспользуемой кавычкой"

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

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

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

chmod ugo=rwx /bin/script.sh

Ответ 5

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